Динамично разширяване на класа в 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)

но грешката е

Uncaught SyntaxError: Unexpected identifier

Проблемът е в динамичните литерали. Когато правя така, работи добре

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

Как мога да го поправя? какво правя грешно

Благодаря предварително.


person artask    schedule 05.05.2012    source източник
comment
Най-вероятно key се променя преди извикването на конструктора. Можете ли да покажете още код?   -  person user123444555621    schedule 05.05.2012
comment
@Pumbaa80, благодаря ти много! Това беше проблем. ключът се повтаряше в цикъл. Сега имам ново изключение Uncaught TypeError: Cannot call method 'stopEditing' of undefined. Имате ли представа какво може да причини това?   -  person artask    schedule 05.05.2012


Отговори (1)


You're key променливата, използвана във вашия конструктор, не е обхваната от тази функция, така че е възможно да може да бъде променена, преди да бъде извикан конструкторът. Можете да използвате createDelegate на Ext, за да свържете променливата към функцията, така че да не може да се промени върху вас:

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);
person Sean Adkinson    schedule 05.05.2012