2011-11-16 74 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