2

ページの読み込み時に以下のような json 応答を取得するアプリケーションがあります。

{
{"level2List":[{id:'id1', name:'sample'},....]},
{"level3List":[{id:'id1', name:'sample'},....]},
{"level4List":[{id:'id1', name:'sample'},....]}}

そのため、「level2List」、「level3List」、level4List などのルート要素内のすべてのレコードを取得しています。これらのレコードを使用して、編集可能なグリッドを作成しています。ユーザーがレコードを編集するとき、私は store.sync メソッドを呼び出しています。次に、編集されたレコードの json のみをバックエンド サーバーに送信します。お気に入り

[{id:'id1', name:'sample'},....]

しかし、ページの読み込みを行っているのと同じ形式で json データを送信する必要があります。つまり、編集されたレコードを、それらが属するルート要素と共に送信する必要があるということです。

どんな助けでも大歓迎です。前もって感謝します..

4

1 に答える 1

2

モデル インスタンスがどの「ルート要素」に属しているかを知っていると仮定すると、カスタム ライターを作成することでこれを実現できます。たとえば、Ext.data.writer.Json を拡張し、その中に独自の writeRecords() メソッドを作成すると、送信するルートを動的に定義できます。

writeRecords: function(request, data) {
    var root = this.root; // HERE IS WHERE YOU COULD DEFINE YOUR ROOT
    if (this.allowSingle && data.length == 1) {
        // convert to single object format
        data = data[0];
    }
    if (this.encode) {
        if (root) {
        // sending as a param, need to encode
            request.params[root] = Ext.encode(data);
        } else {
            //<debug>
            Ext.Error.raise('Must specify a root when using encode');
            //</debug>
        }
    } else {
        // send as jsonData
        request.jsonData = request.jsonData || {};
        if (root) {
            request.jsonData[root] = data;
        } else {
            request.jsonData = data;
        }
    }
    return request;
}

プロキシでカスタム ライターを使用するだけです。

于 2013-01-23T13:06:00.733 に答える