0

以下に示すようなモデル構造があり、Bookings 配列を DataView のデータソースとして使用する方法を知りたいです。

モデル構造:

Client
  ClientId
  Name
  Bookings (HasManyAssociation)
  Contacts (HasManyAssociation)
  AjaxProxy
    JsonReader (ImplicitIncludes is set to true so child models are created with one call)

Booking
  BookingNodeId
  BookingDetails

Contact
  ContactNodeId
  ContactDetails

上記により、次のようなデータ構造が得られます。

Client
  Bookings[
    Booking
    Booking
  ]
  Contacts[
    Contact
    Contact
  ]

私ができるようにしたいのは、Bookings 配列から Store を作成し、そのストアを DataView のデータソースとして使用するか、Bookings 配列をデータソースとして直接使用することです (どのように行うかはあまり気にしません)正直に言ってください)。

予約モデルで AjaxProxy をセットアップすると正常に動作しますが、JSON をロードするときにクライアントと連絡先を自動的に作成することはできません。

階層的にトップレベルのモデルであるクライアントモデルがデータをロードするモデルであることは理にかなっているように思えます。

編集:

私は次のようにそれを理解しました(dataview.setStore()ポインターについては、以下のhandet87に特に感謝します)。

この場合の重要な点は、リレーションシップを作成すると、別のストア (この場合は BookingsStore と ContactsStore) が実際にセットアップされることを理解することです。私がする必要があったのは、 dataview.setStore("BookingsStore") だけでした

4

1 に答える 1

2

Ajaxリクエストを使用してサーバーからデータを取得すると、解析されたjsonデータを配列として使用できます。ストアを定義し、そのデータをそのストアに追加します。最後に、そのストアをデータビューに割り当てます。

Ext.Ajax.request({
url: '/Default.aspx',
params: {
    'params': itemId
},
failure: function (response) {
    Ext.Msg.alert('error', 'error');
},
success: function (response, opts) {
    var jsonData = JSON.parse(response.responseText);
    //now you can access jsonData.Bookings

    var store = Ext.create('Ext.data.Store', {
        model: 'MyApp.model.Client'         
    });

    store.setData(jsonData.Bookings);

    dataview.setStore(store);
}});

主な方法論はそのようになります。お役に立てれば。

于 2012-11-30T15:22:08.143 に答える