Sencha Touch DataView不显示Store中的项目

时间:2012-02-04 07:36:19

标签: store dataview sencha-touch-2

我正在使用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参数被解释为:

  • 商店对象
  • json商店符号,如第一个示例here
  • 已创建商店的名称,可使用StoreManager.lookup
  • 解析

所以我最终得到了:

  1. 在视图
  2. 中离开store:'Dataset'
  3. storeId : "Dataset"添加到商店,以便StoreManager
  4. 解析
  5. 添加导致stores: ['Dataset']创建并在StoreManager中注册的majestic.store.Dataset
  6. P.S。也可以在GridView的this.setStore(new majestic.store.Dataset())方法中使用initialization来完成,但我更喜欢声明的方式

2 个答案:

答案 0 :(得分:2)

以下是一些建议:

  1. 尝试将商店设置为'majestic.store.Dataset',而不仅仅是数据集
  2. 将商店相关性添加到app.js,如下所示:

    Ext.application({
        name: 'majestic',
        stores: ['Dataset'],
    
        launch: function() {   
           ...
        }
    });
    
  3. 不是将字符串传递给store属性,而是传递一个实例:

    store: Ext.create('majestic.store.Dataset')
    
  4. 选项#1似乎是应该工作的最明显的方式。如果没有,这可能是ST2中的一个错误。

答案 1 :(得分:0)

也许你错过了一个id字段

无论如何,我在建筑师的建设中也没有运气,但似乎是一个完全不同的问题。我将按照Architect中的教程(构建您的第一个移动应用程序)并获得洞察力。