如何使用关联的Model作为DataView的数据源

时间:2012-11-29 11:43:30

标签: extjs sencha-touch sencha-touch-2

我有一个如下所示的模型结构,我想知道如何使用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数组作为数据源(我真的不在乎我怎么做说实话)。

如果我在Booking模型上设置了AjaxProxy,它可以正常工作,但显然我加载JSON时无法自动创建客户端和联系人。

在我看来,有意义的是,作为顶级模型的客户端模型是加载数据的模型。

修改

我认为如下(特别感谢下面的handet87为他的dataview.setStore()指针)。

这种情况下的关键是要知道创建关系实际上会设置另一个名为BookingsStore和ContactsStore的商店。 我需要做的就是dataview.setStore(“BookingsStore”)

1 个答案:

答案 0 :(得分: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);
}});

主要方法就是这样。希望这会有所帮助。