ExtJS 4显示网格中多个商店的数据

use*_*612 7 grid extjs extjs4

我有2个模型 - 例如 - 用户和订单

Ext.define('AM.model.User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'username', 'firstName', 'lastName', 'state', 'city'],

    associations: [
    {
            type: 'hasMany', 
            model: 'Order', 
            name: 'orders'
    },],        
});

Ext.define('AM.model.Order', {
    extend: 'Ext.data.Model',
    fields: ['id', 'userId', 'date', 'description', 'value'],    
    belongsTo: 'User',   
});
Run Code Online (Sandbox Code Playgroud)

和他们的商店.我正在寻找一种方法来显示网格中两个商店的数据.(所以我的专栏是firstName,lastName,orderDate,orderDescription,orderValue...

显示它们的正确方法是什么?

谢谢.

Kun*_*nal 6

您应该使用服务器端代码执行此操作,并将所有数据放入单个存储中.


Ren*_* H. 5

如果要使用关联执行此操作,则需要为网格列定义渲染器.
像这样:

{
        text: "orderDescription",
        renderer: function(value,meta,record){//1.
       //var orderStore = record.orderStore;//2a.
       //var orderList = ordersStore.data.items;//2b.
       var orderList = record.orders().data.items; //3.This line is the same as 2 the lines above(2a,2b).
       var order = orderList[0]; //4. TODO..loop through your list. 
       var description = order.data.description; //5. 
       return description ;
 },
Run Code Online (Sandbox Code Playgroud)


我会尝试解释任何想要这样做的人.

  1. 第三个参数是为网格呈现的"用户"存储中的当前记录.前两个只需要在那里,接收记录.离开他们是行不通的.

  2. 1a/1b的.我把它留在那里,以证明协会的运作方式.基本上,"用户"商店中的每条记录都有自己相应的"ordersStore".它将被称为'ordersStore',因为你放入了你的关联[name: 'orders'].
  3. orders()方法再次基于名称"订单"自动创建.这只是返回orderStore.商店包含一个字段data- >,其中包含一个字段items. items是实际的订单清单.
  4. 现在您可以访问您的订单列表.您现在可以通过订单循环.或者,如果您只有一个订单,只需要第一个订单.
  5. order再次包含一个data包含实际数据的字段.