2012-11-14 2 views
0

ExtJS 4.1을 사용합니다. 여기 내 모델과 스토어의 :ExtJS 4.1 - JsonStore의 값 변경

Ext.define('MyModel', { 
    extend: 'Ext.data.Model', 
    fields: ['status', 'data', 'data1', 'data2'] 
}); 

var store1 = Ext.create('Ext.data.JsonStore', { 
    model: 'MyModel', 
    proxy: { 
     type: 'ajax', 
     url : 'actionJsonServlet' 
    }, 
    autoLoad: true 
}); 

아약스하여 저장소를로드 한 후에는, 나는 JsonStore의 (단지 첫 번째 행에 대한) 최초의 "상태"의 값을 변경하고 싶습니다.

var record = store1.getAt(0); 
record.set("status", "Waiting"); 

나는이 오류가 있습니다 : (레코드 라인 2에 정의되어 있지 않습니다) 나는 아래 라인을 시도했지만 작동하지 않습니다

Cannot call method 'set' of undefined 
+0

상점을로드하는 방법은 무엇입니까? 'on()'함수에서 레코드를 설정합니까? – Patrick

+0

내 상점을로드하기 위해 위의 코드 (프록시 URL)로 Ajax에서 Java 서블릿을 호출합니다. 내 서블릿이 Json 데이터를 자동으로 내 저장소에로드합니다. 나는 on() 함수를 사용하지 않는다. Ajax 콜 리턴을 기다리는 데 사용해야합니까? – Zistoloen

답변

1

대부분의 경우 문제가 저장소의 비동기 특성에 기인한다 하중. 코드 작성 방법에 따라 자동 저장 기능이 켜져 있어도 상점이로드되기 전에 상점 조작을 너무 일찍 시도하려고 시도했을 수 있습니다.

가장 좋은 방법은 저장소에로드 이벤트 수신기를 설정하고 작업을 수행하는 것입니다. 그녀의 예입니다 :

Ext.define('MyApp.store.Drafters', { 
    extend:'Ext.data.Store', 
    model:'MyApp.model.User', 
    autoLoad:true, 
    proxy:{ 
     type:'ajax', 
     url:'user/drafters.json', 
     reader:{ 
      type:'json', 
      root:'data' 
     } 
    }, 
    listeners:{ 
     load:function (store, recs) { 
      store.insert(0, {uid:'', name:''}); //adding empty record to enable deselection of assignment 
     } 
    } 
}); 
+0

Ajax를 기다리는 중입니다. 'load' 함수에서'insert' 대신'store.update (0, { 'status': 'Waiting'});를 사용하여 첫 번째 행의 상태 값을 업데이트하려고했지만' (또는 차트가 다시로드되지 않습니다.) – Zistoloen

+0

같은 오류가 발생합니까? 그렇지 않은 경우 원래의 문제와 질문이 해결되면 차트가 상점에 올바르게 바인딩되지 않은 이유를 계속 파악할 수 있습니다. 나는 그것에 대한 speciifc 질문을 생성하고 관련 코드 조각 - 차트 설정 및 저장소 바인딩을 제공하는 것이 좋습니다. – dbrin

+0

동일한 오류가 발생했습니다. 마침내 내 문제를 해결하기위한 다른 해결책을 찾았습니다. 원형 차트의 다른 제목을 표시하고 싶었고 레이블에 대한 작업을 수행했습니다. 시간 내 줘서 고마워. – Zistoloen