我尝试使用ExtJS显示同一模型的不同视图(每个视图显示模型的子集)。
我有一个嵌套模型,可以加载以下xml:
<results>
<hitcount>1234</hitcount>
<recommended>
<title>foo</title>
</recommended>
<result>
<title>title1</title>
<author>author1</author>
</result>
<result>
<title>title2</title>
<author>author2</author>
</result>
</results>
我希望有不同的小部件,每个小部件都显示此模型的一部分(一个列表显示&#39;结果&#39;,另一个显示&#39;推荐&#39;,另一个小部件显示hitcount)。
我不知道如何在每个小部件上声明商店以仅定位完整模型的子集。
听起来像是一种基本的方法,但我没有找到这样的例子(我发现了很多嵌套结构的例子,但没有一个存储范围在模型子集上的商店)。
请参阅下面的一些尝试,我尝试仅获取结果部分。
Ext.define("MySenchaApp.model.ResultModel", {
extend:"Ext.data.Model",
config:{
associations: [
{
type:'hasMany',
model:'MySenchaApp.model.Result',
name:'results',
associationKey:'result'
}
],
proxy:{
type:"ajax",
url:'Results.xml',
reader:{
type:'xml',
rootProperty:'results'
}
}
}
});
Ext.define("MySenchaApp.model.Result", {
extend:"Ext.data.Model",
config:{
fields:['title', 'author'],
belongsTo: 'MySenchaApp.model.ResultModel'
}
});
Ext.define('MySenchaApp.view.Results', {
extend:'Ext.navigation.View',
xtype:'blog',
config:{
title:'Results',
items: [
{
xtype:'list',
itemTpl:'<b>{title}</b> - by <i>{author}</i>',
store:{
autoLoad:true,
model:'MySenchaApp.model.Result' // ??
}
}
]
}
});
答案 0 :(得分:0)
您不能将关联商店作为配置提供,因为它们从不是单例。
考虑以下示例:
Ext.define('User', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'}
],
hasMany: {model: 'Product', name: 'products'}
});
现在,完全可以理解有些人希望拥有一个用户存储,每个用户都有自己的产品关联。因此,如果aUser1
和aUser2
是存储在用户商店中的两个用户记录,那么执行以下操作是完全合法的:
aUser1.products().add( ... );
aUser2.products().add( ... );
关键是,通过关联,没有单身商店这样的东西 - 每个记录都有一个商店。
您的XML建议不能超过1 results
,在这种情况下,您不应该真正使用关联。你应该沿着这些方向做点什么:
Ext.define("MySenchaApp.model.Results", {
extend:"Ext.data.Model",
fields:['title', 'author'],
proxy:{
type:"ajax",
url:'Results.xml',
reader:{
type:'xml',
rootProperty:'results'
}
}
});
并提供以下XML:
<metadata>
<hitcount>1234</hitcount>
<recommended>
<title>foo</title>
</recommended>
</metadata>
<results>
<result>
<title>title1</title>
<author>author1</author>
</result>
<result>
<title>title2</title>
<author>author2</author>
</result>
</results>
使用代理的metachange
事件检查hitcount并推荐。