在获得解决方案之前,这里有一些您的代码问题(在解决方案生效之前需要解决这些问题):
- 在
Contacts
商店内的代理配置中,JSON roog的配置为rootProperty
,而不是root
。proxy: {type: 'ajax',url: 'contacts.json',reader : { type : 'json', rootProperty : 'stores'}}
您也可以将这段代码放入模型中,因为您已经在其中放置了代理配置。这两个都合并了(应该在模型内部,并从商店中删除代理):
proxy: { type: 'ajax', url: 'contacts.json', reader : { type : 'json', rootProperty : 'stores' }}模型名称应始终为单数,因为它们代表一个对象。所以用
Menu
,不要用Menus
。您需要在使用它们的类中要求使用的任何类。例如,您需要在
Sencha.model.Menu
类内部Sencha.model.Contact
添加类,因此请将其添加到内部的requires
属性中Contact.js
:Ext.define('Sencha.model.Contact', {extend: 'Ext.data.Model',requires: ['Sencha.model.Menu'],...});
您需要
associationKey
像通常那样在hasMany关联中使用menus
(从Model名称生成),但在JSON中使用它menu
。hasMany
和belongsTo
配置应该config
在模型的内部。Ext.define('Sencha.model.Contact', {extend: 'Ext.data.Model',requires: ['Sencha.model.Menu'],config: { ... hasMany: { model: "Sencha.model.Menu", associationKey: 'menu' }}});
至于 解决方案 :)-您可以
itemTpl在列表内部进行修改,以显示与正在显示的记录相关的信息。为此,您可以使用:
<tpl for="associatedModelName"> {field_of_associated_model}</tpl>因此,根据您的情况,您可以执行以下操作:
itemTpl: [ '{name}', '<div>', '<h2><b>Menu</b></h2>', '<tpl for="menus">', '<div> - {item}</div>', '</tpl>', '</div>'].join('')这是一个项目的下载(使用SDK工具生成),该项目包括一个演示,主要使用您的代码:http :
//rwd.me/FS57



