我在保存到商店的表单时遇到问题。表单加载用于编辑现有记录的记录,或者对于新记录是空白的。编辑现有记录工作正常。创建一个新的工作正常。如果我想编辑&更新新创建的记录而不关闭并重新打开表单。
我想问题是商店内记录的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);
}
}
答案 0 :(得分: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);
}
当然,你应该把所有这些都放在范围内,但是,希望你能得到这个想法。