1

我在将表单保存到商店时遇到问题。表单加载记录以编辑现有记录,或为新记录为空白。编辑现有记录可以正常工作。创建一个新的也可以正常工作。如果我想在不关闭并重新打开表单的情况下编辑和更新新创建的记录,我会遇到问题。

我想问题是商店内记录的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);
    }
}
4

1 回答 1

1

要继续您的示例,您可以在 store 上监听 write 事件:

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

当然,您应该将所有这些都放在范围内,但希望您能明白这一点。

于 2011-11-16T14:58:16.937 回答