2011-11-16 35 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 = new app.model.newModel(basicForm.getFieldValues()); record.save({ success:function(){console.log(this)} }); ... 不幸的是,我仍然得到舊記錄不是新的更新記錄與分配編號 – 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)行出現錯誤;我不理解爲什麼...未捕獲TypeError:無法讀取未定義的屬性'data' 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