2011-11-16 1 views
1

저장소에 양식을 저장하는 데 문제가 있습니다. 양식은 기존 레코드를 편집하기위한 레코드를로드하거나 새 레코드에 대해 비어 있습니다. 기존 레코드를 편집하면 문제가 없습니다. 새로운 것을 만들면 잘 작동합니다. &을 편집하여 양식을 닫았다가 다시 열지 않고 새로 만든 레코드를 업데이트하려는 경우 문제가 발생합니다.저장소에서 새로 생성 된 레코드를 업데이트하는 양식의 ExtJS 4 문제 - loadRecord updateRecord

저장소의 레코드 ID가 원격 서버를 통해 할당되는 것이 문제라고 생각합니다. 양식에 모델 복사본이 있고 변경 ID에 대한 통지가 없습니다.

양식과 상점을 동기화 상태로 유지하는 방법에 대한 아이디어가 있으십니까?

다음 코드를 저장하기 위해 사용됩니다

var basicForm = this.up('form').getForm(), 
record = basicForm.getRecord(); 

if (basicForm.isValid()) { 

    if (!record) { 
     record = Ext.data.StoreManager.lookup('theModel').add(this.up('form').getForm().getFieldValues())[0]; 
     basicForm.loadRecord(record); 
    } else { 
     basicForm.updateRecord(record); 
    } 
} 
+1

저장소에 쓰기 이벤트에 대한 수신기를 추가하고 거기에있는 양식의 인스턴스에 대한 레코드 ID를 업데이트 할 수 있습니다. – VoidMain

+0

안녕하세요 VoidMain, 나는 그것에 대해서도 생각했습니다. ... var record = 새 app.model.newModel (basicForm.getFieldValues ​​()); record.save ({ 성공 : function() {console.log (this)} }); ... 불행히도 나는 이전의 레코드가 할당 된 ID – Manuel

+0

으로 새롭게 업데이트 된 레코드가 아니라, 힌트를 위해 thx를 얻는 것을 보았습니다. 구현 방법을 알고 있습니까? – Manuel

답변

1

귀하의 예를 계속하려면, 당신은 상점의 쓰기 이벤트를 수신 할 수 있습니다

var basicForm = this.up('form').getForm(), 
record = basicForm.getRecord(), 
store = Ext.data.StoreManager.lookup('theModel'); // We'll add a field for simplicity 
store.on('write', onTheModelWrite); 

if (basicForm.isValid()) { 

    if (!record) { 
     record = Ext.data.StoreManager.lookup('theModel').add(this.up('form').getForm().getFieldValues())[0]; 
     basicForm.loadRecord(record); 
    } else { 
     basicForm.updateRecord(record); 
    } 
} 

var onTheModelWrite = function(s, o)//Here Ext passes the store and the options passed to save() 
{ 
    record = s.getAt(s.indexOf(record)); //We use getAt() because we don't know the id 
    basicForm.loadRecord(record); 
} 

당신은 범위에 모든 것을 넣어한다, 당연히, 당신은 아이디어를 얻는다.

+0

basicForm.loadRecord (record) 행에 오류가 발생했습니다. 내가 왜 이해가 안돼 ... 잡히지 않는 타입 오류 : 정의되지 않은 '데이터'속성을 읽을 수 없음 Ext.define.loadRecordext-all-dev.js : 95393 (익명 함수) xyz.js : 64 fireext-all- dev.js : 16807 Ext.define.fireEventext-all-dev.js : 21000 Ext.define.onProxyWrite – Manuel

+0

's.getAt (..)'다음에? 거기에 아마도 '레코드'필드가 범위를 벗어 났으므로 저장소가 찾을 수 없으면's.getAt' 앞에'console.info (record);'를 추가하면 거기에있는 것을 알 수 있습니다. – VoidMain