我正在使用Sencha touch 2.我已经存储了来自现有js对象的负载:
Ext.define('majestic.store.Dataset', {
extend : 'Ext.data.Store',
requires : [
'majestic.model.Dataset',
'majestic.util.config.ConfigurationManager'
],
config : {
model : 'majestic.model.Dataset',
type: 'memory',
reader: 'json',
autoLoad : true,
proxy: {
type: 'memory',
reader: {
type: 'json',
rootProperty : 'datasets'
}
}
},
constructor: function(config) {
this.callParent(arguments);
this.applyData(majestic.util.config.ConfigurationManager.getConfig());
}
});
型号:
Ext.define('majestic.model.Dataset', {
extend : 'Ext.data.Model',
config : {
fields : [
'title'
],
associations: [
{type: 'hasMany', model: 'Layer', name: 'layers'}
]
}
});
并查看:
Ext.define('majestic.view.LayerList', {
requires: ['majestic.store.Dataset'],
extend: 'Ext.dataview.List',
config:{
store: 'Dataset',
itemTpl: '<div>{id} is {title}</div>',
itemSelector: "div"
}
});
看了Data view in Sencha touch后我添加了autoLoad和itemSelector,但仍然没有运气。
虽然正在运行
new majestic.store.Dataset().each(function(i) {console.log(i)});
输出具有已填充数据属性的对象列表。
更新
我同意@fbrandel的第一个选项是它应该如何工作,但在阅读ST源之后我发现dataview的store参数被解释为:
所以我最终得到了:
store:'Dataset'
storeId : "Dataset"
添加到商店,以便StoreManager stores: ['Dataset']
创建并在StoreManager中注册的majestic.store.Dataset
P.S。也可以在GridView的this.setStore(new majestic.store.Dataset())
方法中使用initialization
来完成,但我更喜欢声明的方式
答案 0 :(得分:2)
以下是一些建议:
将商店相关性添加到app.js,如下所示:
Ext.application({
name: 'majestic',
stores: ['Dataset'],
launch: function() {
...
}
});
不是将字符串传递给store属性,而是传递一个实例:
store: Ext.create('majestic.store.Dataset')
选项#1似乎是应该工作的最明显的方式。如果没有,这可能是ST2中的一个错误。
答案 1 :(得分:0)
也许你错过了一个id字段
无论如何,我在建筑师的建设中也没有运气,但似乎是一个完全不同的问题。我将按照Architect中的教程(构建您的第一个移动应用程序)并获得洞察力。