2012-09-25 30 views
1

我想在Sencha Touch 2项目的数据视图中显示嵌套的JSON数据。 JSON包含具有进度的服务请求的详细信息。与Sencha Architect在数据视图中嵌套的JSON

的JSON:

{ 
    "success": true, 
    "message": "Request retrieved with id:789", 
    "data": { 
     "id": 789, 
     "description": "request description", 
     "subject": "request subject", 
     "progresses": [ 
      { 
       "description": "progress description 1" 
      }, 
      { 
       "description": "progress description 2" 
      }, 
      { 
       "description": "progress description 3" 
      } 
     ] 
    } 
} 

用于获取数据,我有两个型号,一个是requestdetails,一个进步,当然是一个商店。

我的店:

Ext.define('MyApp.store.RequestStore', { 
    extend: 'Ext.data.Store', 
    requires: [ 
     'MyApp.model.RequestModel' 
    ], 
    config: { 
     autoLoad: true, 
     autoSync: true, 
     model: 'MyApp.model.RequestModel' 
    } 
}); 

而且我的模型:

Ext.define('MyApp.model.RequestModel', { 
    extend: 'Ext.data.Model', 
    uses: [ 
     'MyApp.model.ProgressModel' 
    ], 
    config: { 
     fields: [ 
      { 
       name: 'id' 
      }, 
      { 
       name: 'description' 
      }, 
      { 
       name: 'subject' 
      } 
     ], 
     hasMany: { 
      associationKey: 'progresses', 
      model: 'MyApp.model.ProgressModel' 
     }, 
     proxy: { 
      type: 'rest', 
      url: 'http://myurl.com/rest/request/789', 
      reader: { 
       type: 'json', 
       rootProperty: 'data' 
      } 
     } 
    } 
}); 

Ext.define('MyApp.model.ProgressModel', { 
    extend: 'Ext.data.Model', 
    uses: [ 
     'MyApp.model.RequestModel' 
    ], 
    config: { 
     fields: [ 
      { 
       name: 'description' 
      } 
     ], 
     belongsTo: { 
      model: 'MyApp.model.RequestModel' 
     } 
    } 
}); 

这是我的看法:

Ext.define('MyApp.view.MyDataView', { 
extend: 'Ext.dataview.DataView', 

config: { 
    store: 'RequestStoreId', 
    itemTpl: [ 
     '<div>', 
     ' <div>ID</div>', 
     ' <div>{id}</div>', 
     '   ', 
     ' <div>Subject</div>', 
     ' <div>{subject}</div>', 
     '   ', 
     ' <div>Description</div>', 
     ' <div>{description}</div>', 
     '</div>', 
     '', 
     '<h2><b>Progress:</b></h2>', 
     '<tpl for="progressmodels">', 
     ' <div>', 
     '  <div>{description}</div>', 
     ' </div>', 
     '</tpl>' 
    ] 
} 
}); 

显示idrequestTypedescriptionsubject工作正常。在进展情况下,我希望显示所有进度描述,但现在只显示第一个描述。

我尝试了很多,并搜索互联网来解决它,但我无法弄清楚它是什么。

我在这里做错了什么?我想念什么?有同样的问题的人吗?

在此先感谢!

+0

您是否找到解决方案了?我也有和你一样的问题 – Eli

+0

是的,我有。 ''为我工作而不是''。唯一的问题是,你不能在模型中的进度节点(例如日期)中转换数据。您必须在Xtemplate本身中执行此操作。 – weerd2

回答

0

<tpl for="progresses">

更换

<tpl for="progressmodels">

为我工作。 progresses节点是我想要循环的节点。唯一的缺点是你不能用模型转换节点中的数据。你必须在你的XTemplate中做到这一点据我所知:)

希望这会帮助别人!

+0

默认情况下,根节点名称应该是目标模型名称的复数版本,但不一定。你也可以为你的Reader指定'root'配置参数来覆盖它(在这种情况下,坚持'进度')。 – Yuriy