2017-05-01 11 views
0

ExtJSには、私は文字列IDを持つテーブルがあるExtJSの4ExtJSの6 Ajaxの更新の変化が

よりも、行の更新を確認するために、サーバからの同じ応答を期待していない要求します変更を保存し、ExtJSのクライアントは、サーバーに変更されたデータを送信します。ExtJSの4.2では、それはこのように、バック二つの製品の完全なデータを送信するためにサーバーを期待

[{"ord":1,"productid":"SG30301"},{"ord":3,"productid":"SG30100"}] 

{ 
    "success":true, 
    "data":[{ 
     "nrproduit":"SG30100", 
     "ord":3, 
     "author":"...", 
     "editor":"...", 
     (...) 
    },{ 
     "nrproduit":"SG30301", 
     "ord":3, 
     "author":"...", 
     "editor":"...", 
     (...) 
    }] 
} 

ExtJs 6.2では、これはもう機能しません。私はどうやら、クライアントのアカウントにidPropertyを取るが、列の順序は要求のように反応して同じことを期待しているようだしないエラーに

Uncaught Error: Duplicate newKey "SG30100" for item with oldKey "SG30301"

を取得します。

クライアントがサーバーから返されたIDを強制的に考慮する方法はありますか?または、サーバーコードを変更する必要がありますか?クライアントとサーバー間のデータ同期に関して、ExtJs 4.2と6.2の間で正確に何が変更されたかについてのドキュメントがありますか?

答えて

1

ExtJSは、IDが変更できるため、注文を考慮します。挿入操作中(IDがサーバー側で生成されている場合)これを可能にするために、一般的なケースでは、ExtJSは、レコードが送信されたのと同じ順序でサーバーから結果を受け取ることを想定しています。

しかし、それ以上のことがあります。特定の状況下では、注文ではなくIDを使用します。 Operation.doProcessを読むと、ExtJSがどのように動作するのかを知ることができます。また、異なる動作が必要な場合には、それを上書きすることもできます。

編集:モデルにプロパティーclientIdPropertyがある場合はIDを使用し、そうでない場合はその注文を使用します。だから、このようにそれを追加するために十分である:

Ext.define('App.Product', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'productid', type: 'string'}, 
     {name: 'ord', , type: 'int'}, 
     (...) 
    ], 
    idProperty: 'nrproduit', 
    clientIdProperty: 'nrproduit' 
}) 
+0

このコードは、基本的に再開:レコードは 'clientIdProperty'を持っている場合、それが対応を作成するためである他、返されたレコードを識別します。 –

+0

重要な点:ExtJsでは、サーバーがデータを送信しない場合、 'update'と' create'はデフォルトでコミットされます。正しくリコールした場合(そして正しく解釈するとhttp://docs.sencha.com/extjs/4.2.2/source/Operation.html#Ext-data-Operation-method-commitRecords)、ExtJs 4.2ではサーバが返送を要求されましたレコードデータ。 –

関連する問題