修改 initComponent() 中的项目

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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]);

【讨论】:

以上是关于修改 initComponent() 中的项目的主要内容,如果未能解决你的问题,请参考以下文章

Extjs 4.1 - 如何在 initComponent 函数中创建项目

InitComponent的使用

在 initComponent 中声明时,事件侦听器未调用控制器方法

Ext.define() 中有关 initComponent() 的最佳实践

配置监听器使项目启动时创建消费者

当initcomponent加载存储extjs 4.1.1时视图不显示存储