在商店创建时静态定义商店中的数据

时间:2011-10-22 13:08:40

标签: extjs4

我想创建一个可以重复使用的简单商店,只包含数年。

Ext.define('Workshop.store.YearsStore', 
{
    extend: 'Ext.data.Store',
    fields: ['id', 'type'],
    constructor: function(config) 
    {
        var years = [];
        for(var n=1972;n<=Ext.Date.format(new Date(), 'Y');n++)
        {
            years.push({id: n, type: n});
        }
        config.data = years;
        this.initConfig(config);
        return this;
    }
});

这不起作用,如何在商店创建时定义静态数据集?

1 个答案:

答案 0 :(得分:1)

要纠正的事情很少:

  1. 您无需致电initConfiginitConfig旨在添加getter&amp;类中config属性中包含的属性中的setter。在这种情况下,您只需要致电callParent。它应该照顾好你的其余部分。
  2. 如果未定义config,您将忘记处理此案例。 config可能为null,在某些情况下,您的第config.data行会引发config is undefined
  3. 使用原生(new Date()).getFullYear()似乎更好?
  4. 以下是经过修改的代码,link to demo

    Ext.define('Workshop.store.YearsStore', {
        extend: 'Ext.data.Store',
        fields: ['id', 'type'],
        startYear: 1972,
        endYear: (new Date()).getFullYear(),
        constructor: function(cfg) {
            var me = this;
    
            //We init the configurations first (to copy startYear and endYear)
            Ext.apply(me, cfg || {});
    
            me.data = [];
            //Then we push data
            for(var n = me.startYear ; n <= me.endYear ; n++) {
                me.data.push({id: n, type: n});
            }
    
            //Then finally we callparent to init this store.
            me.callParent([cfg]);
        }
    });