1

これはクラッシュします:

var grdMakes = Ext.extend(Ext.grid.Panel, {
  constructor: function(paConfig) {
  }
}

これはしません:

var grdMakes = Ext.extend(Ext.grid.Panel, {
}

クラッシュは次のとおりです。

Uncaught TypeError: Cannot read property 'added' of undefined

コンストラクターを追加するとクラッシュするのはなぜですか?私は次のような他のオブジェクトでそれを行うことができます:

var pnlMakesMaint = Ext.extend(Ext.Panel, {
    constructor: function(paConfig) {
    }
}  // just fine

編集

私がやりたいことを明確にするために、デフォルトをオーバーライドするオプションを使用してオブジェクトをインスタンス化できるようにしたいということです。

var g = new grdMakes({});  // defaults used

var g = new grdMakes({renderTo: Ext.getBody()}); // renderTo overridden

これは、Ext.grid.Panel

また、私は使用していますExtJS 4

解決

結局のところ、extendはExtJS 4で非推奨になっています。そこで私はこれを使用しましたが、機能します。

Ext.define('grdMakes', {
     extend: 'Ext.grid.Panel',

     constructor: function(paConfig) {
        var paConfig = Ext.apply(paConfig || {}, {
           columns:   !paConfig.columns ? [{
              header: 'Makes',
              dataIndex: 'make'
           }, {
              header: 'Description',
              dataIndex: 'description'
           }]: paConfig.columns,
           height:     !paConfig.height ? 400 : paConfig.height,
           renderTo:   !paConfig.renderTo ? Ext.getBody() : paConfig.renderTo,
           store:      !paConfig.store ? stoMakes : paConfig.store,
           title:      !paConfig.title ? 'Makes' : paConfig.title,
           width:      !paConfig.width ? 600 : paConfig.width

        });

        grdMakes.superclass.constructor.call(this, paConfig);
     }
}
4

1 に答える 1

2

わかりました。しかし、コードはExtJS3のようです。Ext.extendはExtJS4バージョンでは廃止されているため、extendの代わりにdefineを使用できます。参照用に次のURLを確認してください。

http://docs.sencha.com/ext-js/4-0/#/api/Ext-method-extend

Afaik、デフォルトオプションをオーバーライドする場合、これは完璧な方法ではありません。Ext.overrideを使用する必要があります。

例えば:

Ext.override(Ext.grid.Panel,{
   lockable : true
});

上記のように、デフォルトのオプションをオーバーライドする必要があります。

于 2011-08-09T15:17:32.730 に答える