2011-10-22 135 views
1

我想創建一個可以重複使用的簡單商店,只包含幾年。在商店創建中靜態定義商店中的數據

Ext.define('Workshop.store.YearsStore', 
{ 
    extend: 'Ext.data.Store', 
    fields: ['id', 'type'], 
    constructor: function(config) 
    { 
     var years = []; 
     for(var n=1972;n<=Ext.Date.format(new Date(), 'Y');n++) 
     { 
      years.push({id: n, type: n}); 
     } 
     config.data = years; 
     this.initConfig(config); 
     return this; 
    } 
}); 

這不起作用,我如何定義商店創建的靜態數據集?

回答

1

幾件事情需要糾正:

  1. 你並不需要調用initConfiginitConfig用於在類中的config屬性中包含的屬性中添加吸氣劑&設置器。在這種情況下,您只需撥打callParent即可。它應該照顧你休息。
  2. config沒有定義時,您忘記了照顧案件。 config可能爲空,並且在某些情況下,您的行config.data將引發config is undefined
  3. 使用原生(new Date()).getFullYear()似乎更好?

以下是修改後的代碼,link to demo

Ext.define('Workshop.store.YearsStore', { 
    extend: 'Ext.data.Store', 
    fields: ['id', 'type'], 
    startYear: 1972, 
    endYear: (new Date()).getFullYear(), 
    constructor: function(cfg) { 
     var me = this; 

     //We init the configurations first (to copy startYear and endYear) 
     Ext.apply(me, cfg || {}); 

     me.data = []; 
     //Then we push data 
     for(var n = me.startYear ; n <= me.endYear ; n++) { 
      me.data.push({id: n, type: n}); 
     } 

     //Then finally we callparent to init this store. 
     me.callParent([cfg]); 
    } 
});