7

私は次のモデルを持っています:

Ext.define('Gst.model.Order', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        { name: 'id', type: 'string' } 
    ]
});     

私の問題は、注文モデルの ID がユーザー定義であることです。したがって、新しい注文インスタンスを作成して注文ストアに挿入するコードは次のようになります。

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedvalue'}); 
store.insert(0, order);

idProperty がユーザーによって提供されるため、注文はファントムとしてマークされないため、ダーティとは見なされません。このため、サーバーに対して POST は発行されません。注文をファントムとダーティに手動で設定すると、次のように注文をストアに挿入したときに POST をトリガーできます。

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedID'});
order.phantom = true;
order.setDirty(); 
store.insert(0, order);

これは問題ありませんが、私のサーバー側のコードは REST コントローラーを使用しており、POST の URL に id が含まれていないことを期待しています。したがって、リクエストextJSの問題は

POST http://app.local/api/order/someuserdefinedID.json

私のサーバーが探すフォーマットは

POST http://app.local/api/order.json

したがって、これを修正する唯一の方法は、注文を作成してファントム = true に設定し、setDirty() を呼び出すことです。これにより、POST が発行され、RestProxy で buildUrl: をオーバーライドして、POST リクエストをテストし、idProperty を URL から削除するロジックを使用します。

これは私には醜い回避策のように思えますが、もっと良い方法があるかどうか知りたいですか?

私の質問は次のとおりだと思います。このようなものを処理する最良の方法は何ですか?

4

2 に答える 2

1

order_id考えられる解決策は、プロパティをモデルに追加idし、自然キーのままにすることでしょうか? フレームワークがidProperty. ちょうど私の2c。

于 2013-01-28T16:43:41.650 に答える
0

John Hall が言うようidpropertyに、フレームワーク (内部 ID) によって暗黙の ID が使用されるように、別の ID を使用するか、ID の名前を変更する必要があります。

その後、ダーティ/ファントムが機能し、投稿にはユーザーIDがデータに含まれますが、レコードのキーとしては含まれません。

于 2014-06-13T10:20:13.447 に答える