Sencha touch 以MVC方式从许多模型中生成Ext.dataview.List中的项
我有一个Sencha touch 以MVC方式从许多模型中生成Ext.dataview.List中的项,sencha-touch,Sencha Touch,我有一个博客模型,其中有许多帖子(以及许多其他字段)。现在我想在列表中列出这些帖子,如下所示: [我的帖子#1] [我的帖子#2] [我的帖子#3] 正如API所描述的,我能够将存储或数据属性传递给Ext.dataview.List。但我无法找到如何将hasmall记录传递到列表,以便它为每个记录显示一个项目 我真的需要再开一家店吗?是否可以将我的dataview配置为类似于存储:“Blog.posts”或数据:“Blog.posts”或甚至记录:“Blog.posts”?扩展datavie
博客
模型,其中有许多帖子
(以及许多其他字段)。现在我想在列表中列出这些帖子,如下所示:
- [我的帖子#1]
- [我的帖子#2]
- [我的帖子#3]
正如API所描述的,我能够将存储或数据属性传递给Ext.dataview.List。但我无法找到如何将hasmall记录传递到列表,以便它为每个记录显示一个项目
我真的需要再开一家店吗?是否可以将我的dataview配置为类似于存储:“Blog.posts”或数据:“Blog.posts”或甚至记录:“Blog.posts”
?扩展dataview.List以定义要在帖子中循环的itemtpl
itemTpl: new Ext.XTemplate(
'<tpl for="**posts**" >',
'<div>{TheBlogPost}</div>',
'</tpl>'
)
itemTpl:new Ext.XTemplate(
'',
“{TheBlogPost}”,
''
)
正如@Adam Marshall所说,这并不像我想象的那么容易。如果您知道如何访问关联,Sencha会自动从关联中生成存储。
因此,在加载自动生成的“子存储”时,您只需切换列表的存储即可
这种方法可能有一些问题,例如,当使用listpaging插件时,但是它很快
例如:
型号
Ext.define('Conversation', {
extend: 'Ext.data.Model',
config: {
fields: [
],
associations:
[
{
type: 'hasMany',
model: "Message",
name: "messages",
associationKey: 'messages'
}
]
}
});
Ext.define('Message' ,
{
extend: "Ext.data.Model",
config: {
idProperty: 'id_message',
fields: [
{ name: 'text', type: 'string' },
{ name: 'date', type: 'string' },
{ name: 'id_message', type: 'int' },
{ name: 'me', type: 'int'} // actually boolean
]
}
}
);
JSON
[
{
"messages": [
{"id_message": 11761, "date": 1378033041, "me": 1, "text": "iiii"},
{"id_message": 11762, "date": 1378044866, "me": 1, "text": "hallo"}
]}
]
控制器
this.getList().getStore().load(
{
callback: function(records, operation, success) {
//IMPORTANT LINE HERE:
getList().setStore(Ext.getStore(me.getList().baseStore).getAt(0).messages());
},
scope: this
}
);
列表视图
{
flex: 1,
xtype: 'list',
itemId: 'ConversationList',
data: [],
store: 'ConversationStore',
baseStore: 'ConversationStore',
itemTpl:
' {[app.util.Helpers.DateFromTimestamp(values.date)]}<br><b>{name}</b>' +
' {[app.util.Helpers.fixResidualHtml(values.text)]} </div>' +
},
{
弹性:1,
xtype:'列表',
itemId:'会话列表',
数据:[],
store:“ConversationStore”,
baseStore:'ConversationStore',
第三方物流:
“{[app.util.Helpers.DateFromTimestamp(values.date)]}
{name}”+
“{[app.util.Helpers.fixrisdualhtml(values.text)]”+
},
但我只有一个项目(将我的帖子作为内部HTML列出),对吗?什么,如果我想每个帖子都有一个项目?对不起,是的,你是对的,我查看了dataview代码,但没有什么突出的。除了创建一个新的商店,或者让商店超载以报告更多的商品,我认为你正在尝试做的事情是做不到的。