为啥这个 Ext.grid.Panel 会崩溃?

Posted

技术标签:

【中文标题】为啥这个 Ext.grid.Panel 会崩溃?【英文标题】:Why does this Ext.grid.Panel crash?为什么这个 Ext.grid.Panel 会崩溃? 【发布时间】:2011-08-09 15:02:10 【问题描述】:

这会崩溃:

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

【问题讨论】:

您可以尝试使用 Ext.override 而不是 Ext.extemd。我怀疑您要使用构造函数做什么?我的意思是您要覆盖基本构造函数,否则您需要使用它喜欢方法? 同样的错误。我只是希望能够执行以下操作:var g = new grdMakes(); 或者,能够:var g = new grdMakes(renderTo:Ext.getBody()) 并覆盖默认值 你是在 ExtJS3 还是 4 中尝试这个? 查看编辑以获得更好的说明 【参考方案1】:

好的。但是您的代码看起来像 ExtJS3。因为 Ext.extend 在 ExtJS4 版本中已被弃用。您可以使用定义代替扩展。作为参考,您可以查看以下网址:

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

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

例如:

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

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

【讨论】:

呃。好的,我想知道这一点。我们在这里继承了一些遗留的东西。有没有我可以用来定义的例子? 你可以在这里查看定义的工作docs.sencha.com/ext-js/4-0/#/api/Ext-method-define 谢谢!我奖励你为我指明正确方向的答案。我会用我的解决方案更新我的问题。

以上是关于为啥这个 Ext.grid.Panel 会崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

将 ext.grid.panel 添加到 ext.form.panel 时出错

如何在 Ext.grid.panel 中定义视图

将 Ext.grid.Panel 绑定到 Ext.Panel 时出错

使用 Ext.grid.Panel.reconfigure() 打破了网格 RowEditing 插件

在 EXTJS 4 中向 Ext.Grid.panel 添加监听器

extjs ext5 Ext.grid.Panel 分页,搜索