1

私は extjs 4.1.1 のマスタースレーブ詳細ページに取り組んでいます。

多くの Address モデルを持つ Person モデルがあります。(EXTJS で関係を構成しました)

すべての人のレコードを表示するグリッドがあり、レコードをクリックすると、この人の関連する住所が別のグリッドに表示されます。

私が使用する2番目のグリッドを設定するには:

var grid2 = this.getAddressList(); //made a reference to this
var store = record.Addresses(); // this gives me the addresses store associated with the person record
...
grid2.reconfigure(store);

個人のアドレス ストアにアドレスを追加すると、残りのサーバーに対して ajax リクエストが送信されます。extjs が関連データもサーバーに送信することを確認するために、特別なライター クラス (extjs フォーラムのコード) を作成しました。

Ext.define('Ext.data.writer.DeepJson', {
extend:'Ext.data.writer.Json',
getRecordData:function (record, operation) {
    var isPhantom = record.phantom === true,
        writeAll = this.writeAllFields || isPhantom,
        nameProperty = this.nameProperty,
        fields = record.fields,
        data = {},
        changes,
        name,
        field,
        key;

    if (writeAll) {
        // This is the branch that has been changed from the original Json Writer
        data = record.getData(true);
    } else {
        changes = record.getChanges();
        for (key in changes) {
            if (changes.hasOwnProperty(key)) {
                field = fields.get(key);
                name = field[nameProperty] || field.name;
                data[name] = changes[key];
            }
        }
    }
    if (isPhantom) {
        if (operation && operation.records.length > 1) {
            data[record.clientIdProperty] = record.internalId;
        }
    } else {
        data[record.idProperty] = record.getId();
    }

    return data;
}
});

サーバー側では、データベースを更新するだけで、extjs がフロント エンドを更新できるように、関連付けられたアドレスを json オブジェクトに入れた人物が返されます。

問題は、extjs は人物グリッドのみを更新でき、住所グリッドは更新できないことです。サーバーが更新されたバージョンのレコードで応答した場合でも、新しく作成されたアドレス レコードはダーティとしてマークされたままになります (サーバーはそれに ID を与えます)。

似たようなことに遭遇したことがあり、アドバイスを提供できる人はいますか? 多くのコードを提供していないことに気づきましたが、もっと共有したいと思っています。必要な部分がわかりません。

編集 MyStore.load() を使用してデータをグリッドにロードしますストアには、次のように構成されたレストプロキシがあります。

proxy:
    {
        type: 'rest',
        url: 'persons', //general read url
        headers : auth, //basic auth to connect to rest service
        reader:
        {
            type: 'json',
            root: 'persons',
            successProperty: 'renderList'
        },

        writer:Ext.create('Ext.data.writer.DeepJson', {root: 'persons'}), //above writer class
        api:
        {
            update: 'persons/person',
            create: 'persons/person',
            destroy: 'persons/person'

        },
    }
4

0 に答える 0