为什么这个Ext.grid.Panel会崩溃?

时间:2011-08-09 15:02:11

标签: extjs4 gridpanel

崩溃了:

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

事实证明,在ExtJS 4中不推荐使用extend。所以我使用了它并且它可以工作:

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

1 个答案:

答案 0 :(得分:2)

好的。但你的代码看起来像ExtJS3。因为Ext.extend在ExtJS4版本中被删除了。而不是扩展你可以使用define.For参考你可以查看以下网址:

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

Afaik,对于覆盖默认选项,这不是完美的方法。你需要使用Ext.override。

例如:

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

如上所述,您必须覆盖默认选项。