【问题标题】:Load data into Ext.data.Store with function on init in ExtJS MVC使用 ExtJS MVC 中的 init 函数将数据加载到 Ext.data.Store
【发布时间】:2013-06-15 05:17:59
【问题描述】:

我需要在 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'

【问题讨论】:

  • 以下解决方案在 Architect 中都不起作用:闭包删除了所有空格,因此 new Date 变为未定义的 newDate;并且函数me.getYears() 得到引号,从而成为字符串'me.getYears()'

标签: extjs store


【解决方案1】:

你可以这样做:

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;
    })()
});

【讨论】:

  • 谢谢,正是我想要的!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    到目前为止,建议的解决方案都不适用于 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;
            }());
        }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多