0

クラスを動的に拡張し、次のコードを使用する必要があります。

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

どうすれば修正できますか?私は何を間違っていますか?

事前にサンクス。

4

1 に答える 1

0

コンストラクターで使用されているkey変数はその関数にスコープされていないため、コンストラクターが呼び出される前に変更できる可能性があります。Ext を使用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);
于 2012-05-05T20:47:56.073 に答える