2012-05-05 5 views
0

에서 동적으로 클래스를 확장하고이 코드를 사용해야합니다확장 클래스를 동적으로 ExtJS로

Calc.grid.Table["Table"+key] = function(config) { 
     config = config || {}; 
     Ext.applyIf(config,{ 
       id: 'calc-grid-table'+key 
       ,baseParams: { 
        action: 'mgr/calc/calcGetTable'+key 
        ,query: 'Calc'+key 
       } 
     }); 
     Calc.grid.Table["Table"+key].superclass.constructor.call(this,config) 
}; 
Ext.extend(Calc.grid.Table["Table"+key],Calc.grid.Table); 
Ext.reg('calc-grid-table'+key,Calc.grid.Table["Table"+key]); 

를하지만 나에게 오류 제공 :

Uncaught TypeError: Cannot read property 'superclass' of undefined 

나는이

로 변경 시도를
this.superclass.constructor.call(this,config) 

그러나 오류는

입니다.

문제는 동적 리터럴에 있습니다. 내가 좋아하면 잘 작동합니다.

Calc.grid.Table.Table21 = function(config) { 
     config = config || {}; 
     Ext.applyIf(config,{ 
       id: 'calc-grid-table'+21 
       ,baseParams: { 
        action: 'mgr/calc/calcGetTable'+21 
        ,query: 'Calc'+21 
       } 
     }); 
     Calc.grid.Table.Table21.superclass.constructor.call(this,config) 
}; 
Ext.extend(Calc.grid.Table.Table21,Calc.grid.Table); 
Ext.reg('calc-grid-table'+21,Calc.grid.Table.Table21); 

어떻게 해결할 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

고지.

+0

생성자 전에 변경이라고 key''가능성이 높습니다. 더 많은 코드를 보여줄 수 있습니까? – user123444555621

+0

@ Pumbaa80, 정말 고마워요! 그것은 문제였습니다. 키가 루프에서 반복되었습니다. 이제 새로운 Exeption "Uncaught TypeError : 정의되지 않은"stopEditing '메서드를 호출 할 수 없습니다. 이 문제를 일으킬 수있는 어떤 생각이 있습니까? – artaskerov

답변

0

사용자가 key입니다. 생성자에서 사용중인 변수의 범위가 해당 함수가 아니므로 생성자를 호출하기 전에 변경할 수 있습니다. 당신에 변경할 수 있도록 함수에 변수를 묶어 내선의 createDelegate를 사용할 수 있습니다

Calc.grid.Table["Table"+key] = function(key, config) { 
    config = config || {}; 
    Ext.applyIf(config,{ 
      id: 'calc-grid-table'+key 
      ,baseParams: { 
       action: 'mgr/calc/calcGetTable'+key 
       ,query: 'Calc'+key 
      } 
    }); 
    Calc.grid.Table["Table"+key].superclass.constructor.call(this,config) 
}.createDelegate(this, [key], 0);