ExtJS 4表单更新商店中新创建的记录的问题 - loadRecord updateRecord

时间:2011-11-16 10:35:17

标签: forms extjs extjs4 store extjs-mvc

我在保存到商店的表单时遇到问题。表单加载用于编辑现有记录的记录,或者对于新记录是空白的。编辑现有记录工作正常。创建一个新的工作正常。如果我想编辑&更新新创建的记录而不关闭并重新打开表单。

我想问题是商店内记录的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 个答案:

答案 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);
}

当然,你应该把所有这些都放在范围内,但是,希望你能得到这个想法。