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

例を続けるために、ストアで書き込みイベントをリッスンできます。

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 に答える