Динамическое расширение класса в 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: невозможно вызвать метод stopEditing из неопределенного. У вас есть идеи, что может быть причиной этого?   -  person artask    schedule 05.05.2012


Ответы (1)


Ваша переменная 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