【问题标题】:Modifying items in initComponent()修改 initComponent() 中的项目
【发布时间】:2012-11-30 13:06:39
【问题描述】:

我在initComponent() 中创建了一些项目 问题是,this.items 以某种方式引用了类变量,而不是实例变量。

所以当我创建两个实例时,我会得到两个按钮。

items: [],
initComponent: function() {
  this.items.push( { xtype: 'button', ... }) ;
  this.callParent( arguments );
}

由于我必须使用推送,所以每次推入新元素时。

是否有一些相当于this.items 的实例,我可以在创建按钮之前修改定义,还是必须手动检查重复项?

【问题讨论】:

    标签: extjs extjs4.1


    【解决方案1】:

    你不应该return this.callParent( arguments );

    这样就够了:

    initComponent: function() {
        var me = this;
        me.items = { xtype: 'button', ... }; //Are you sure items is filled up here?
        me.callParent();
    }
    

    此外,如果您正在编写自己的“组件”并且想要在 Ext.create 中传递参数,我总是会执行以下操作:

    constructor: function (config) {
        var me = this;
        Ext.apply(me, config); 
        me.callParent();
    }
    

    这将用您提交的Ext.create() 覆盖您班级中的项目声明

    【讨论】:

    • arrr。 Ext.menu.Menu 可能希望这些项目是一个数组。如果我使用对象,则不会创建项目。如果我使用数组并将项目推入,它们就会被创建,但是每次调用 initComponent 时,都会有更多的推入,这就是为什么我首先遇到了这个问题:(在我的问题中编辑了代码
    • initComponent 只被调用一次,项目可以是数组或 1 个对象(之后转换为数组)。
    • 谢谢。我一直在寻找这个太久了。
    【解决方案2】:

    您可以重载构造函数并在其中调整配置:

    constructor: function(config)
    {
      config.items.someButton = { xtype: 'button', ... };
      this.callParent([config]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2013-09-17
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多