2

次のような関数で 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'

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()は引用符を取得するため、 string になります'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 に答える