2011-10-22 2 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. 당신은 initConfig를 호출 할 필요가 없습니다. initConfig은 클래스의 config 속성에 포함 된 속성에 getter & 설정자를 추가하기위한 것입니다. 이 경우 callParent으로 전화하면됩니다. 나머지는 돌봐야합니다.
  2. config이 정의되지 않은 경우를 처리하는 것을 잊었습니다. config은 null 일 수 있으며 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]); 
    } 
}); 
관련 문제