2

我需要在 init 上使用以下函数填充存储数据:

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'

4

3 回答 3

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;
    })()
});
于 2013-02-26T10:43:11.850 回答
2

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

constructor: function() {
    var me = this;
    Ext.apply(me, {
       data: me.getYears()
    });
    me.callParent();
}
于 2013-02-26T10:40:53.310 回答
0

到目前为止,建议的解决方案都不适用于 Sencha Architect:闭包删除了所有空格,因此new Date变成了 undefined 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;
        }());
    }

});
于 2013-06-14T21:17:59.193 回答