我需要在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'
答案 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;
}());
}
});