当我使用Ext.create("....")时,我想做一些初始化。该对象既简单又小,我不想定义它,但它需要一些来自 mixin 的方法(在调用组件创建之前)......我该怎么做?
问问题
1677 次
2 回答
2
听起来您正在按照以下方式做一些事情:
Ext.create('Ext.panel.Panel', {
prop1: value1,
prop2: value2
});
如果是这种情况,您应该能够添加一个名为 initComponent 的属性,它是一个执行您想要的功能的函数。只要记住调用原始的 initComponent 以便一切都正确构建:
Ext.create('Ext.panel.Panel', {
prop1: value1,
prop2: value2,
initComponent: function () {
this.doSomething();
Ext.panel.Panel.prototype.initComponent.apply(this, arguments);
}
});
于 2012-07-17T18:21:06.167 回答
2
标准实例覆盖
通常,我们会使用
Ext.override()
afterExt.create()
将覆盖应用到类的特定实例(请参阅文档):var myObj = Ext.create('Ext.some.Component', { ... }); Ext.override(myObj, { myMethod: function() { // Do something. this.callParent(arguments); // From Ext.some.Component class. // Do something else. } });
this.callParent(arguments)
仅适用于创建的覆盖- 通过
Ext.override()
, 或 - 隐含地通过
Ext.define()
- 通过
特殊情况:覆盖initComponent
由于该
initComponent
方法在执行期间Ext.create()
被调用,我们必须在Ext.create
. 为了访问原始方法,我们必须使用一种变通方法来访问被覆盖的方法:var myObj = Ext.create('Ext.some.Component', { initComponent: function() { // Do something. // Get a reference to the class. var myClass = Ext.getClass(this); // Apply the overridden method from the class' prototype. myClass.prototype.initComponent.apply(this, arguments); // Do something else. } });
于 2012-07-17T22:45:09.553 回答