使用ExtJS MVC中的init函数将数据加载到Ext.data.Store中

时间:2013-02-26 10:32:49

标签: extjs store

我需要在init上用以下函数填充Store数据:

Ext.define('Vcs.store.Years', {

    extend: 'Ext.data.Store',
    fields: ['year'],
    data: this.getYears(),
    getYears: function() {
        var data = []
            date = new Date
            thisYear = date.getFullYear();
        for(var i = thisYear - 100; i <= thisYear; i++) {
            data.push({
            year: i,
            });
        }
        return data;
    }
});

此代码提供错误:Object [object global] has no method 'generateYears'

3 个答案:

答案 0 :(得分:5)

你可以这样做:

Ext.define('Vcs.store.Years', {  
    extend: 'Ext.data.Store',
    fields: ['year'],
    data: (function() {
        var data = [],
            date = new Date,
            thisYear = date.getFullYear();
        for(var i = thisYear - 100; i <= thisYear; i++) {
            data.push({
            year: i
            });
        }
        return data;
    })()
});

答案 1 :(得分:2)

我认为this的范围是错误的。你必须填充构造函数中的数据:

constructor: function() {
    var me = this;
    Ext.apply(me, {
       data: me.getYears()
    });
    me.callParent();
}

答案 2 :(得分:0)

到目前为止,建议的解决方案都没有在Sencha Architect中使用:闭包会删除所有空格,因此new Date变为未定义的newDate;函数me.getYears()得到引号,从而成为字符串'me.getYears()'

所以对于那些使用Sencha Architect的人来说,这是一个应该使用的版本。我只是在商店的“加载”事件中使用了.add()方法。

Ext.define('MyApp.store.MyStore', {
    extend: 'Ext.data.Store',

    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            autoLoad: true,
            storeId: 'MyStore',
            fields: [
                {
                    name: 'year',
                    type: 'int'
                }
            ],
            listeners: {
                load: {
                    fn: me.onStoreLoad,
                    scope: me
                }
            }
        }, cfg)]);
    },

    onStoreLoad: function(store, records, successful, eOpts) {
        store.add(function() {
            var data = [];
            var date = new Date();
            var thisYear = date.getFullYear();

            for (var i = thisYear - 100; i <= thisYear; i++) {
                var obj = { year:i };
                data.push(obj);
            }

            return data;
        }());
    }

});