我看到以下代码(ExtJs 3.0),并且有疑问。
Ext.ns('Dummy.');
Dummy.RevEvents = Ext.extend(Ext.Panel,
{
getData:function(){
this.deletedRows=[];
this.newRows=[];
......
},
deletedRows:[],
newRows:[],
addEditableRow: function(){
...
},
initComponent:function(){
var revEvents_config = {
autoScroll:true
...
,listeners: {afterrender: function(t) {
...
}}
,buttons:[
...
]
}
Ext.apply(this, Ext.apply(this.initialConfig, revEvents_config));
Dummy.RevEvents.superclass.initComponent.call(this, revEvents_config);
},..
});
Ext.reg('REVEVTS', Dummy.RevEvents);
1.将配置传递给超类的init组件的意图是什么?
尚未将其应用于申请?
2.建议将侦听器和控件添加到组件中吗?
答案 0 :(得分:0)
代码可能是由一个不太了解发生了什么的人编写的。
Ext.apply(this, Ext.apply(this.initialConfig, revEvents_config));
这将#1 /使用组件的默认设置initialConfig
覆盖组件revEvents_config
,然后#2 /将结果配置应用到组件上。我假设开发人员改变了预期用途:#1 / initialConfig
是只读的,而#2 /使用某些默认设置覆盖组件的配置是没有意义的。
在Ext 3中将侦听器添加到扩展对象的标准方法是执行以下操作:
/**
* @class MyNamespace.MyComponent
* @extends OtherNamespace.OtherComponent
* <p>Some comments here to be built by jsduck</p>
*/
MyNamespace.MyComponent = Ext.extend(OtherNamespace.OtherComponent, {
defaultProp1 : defaultVal1,
defaultProp2 : defaultVal2,
// we get here AFTER the component's properties have been initialized by
// the Ext.extend method.
initComponent : function(){
// call OtherNamespace.OtherComponent's initComponent
MyNamespace.MyComponent.superclass.initComponent.call(this);
// add custom events to the existing ones from OtherNamespace.OtherComponent
this.addEvents('event1', 'event2', ...);
// add any logic pertaining to the resulting config from Ext.extend
if(this.defaultProp1 === ...){ ... }
},
otherPublicMethod: function(){
...
},
otherPublicMethodThatOverridesSuperClass: function(){
// do we need to call the super method?
// if yes:
MyNamespace.MyComponent.superclass.otherPublicMethodThatOverridesSuperClass.call(this);
...
}
});
Ext.reg('mycustomtype', MyNamespace.MyComponent);
答案 1 :(得分:0)
不确定意图是什么,将配置传递给initComponent
将不会做任何事情。小组的initComponent
没有任何论据。与initialConfig
混淆是要求未定义的行为。默认的Component
构造函数将接受传入的配置,将其应用于当前实例并将其保存为initialConfig
。修改initialConfig或甚至查看其值几乎没有任何参数。
添加侦听器的推荐方法是在on
中调用addListener
或initComponent
。这将允许扩展类或实例以添加侦听器而不会覆盖它们。例如,new Dummy.RevEvents({listeners: destroy ..})
会覆盖您示例中可能不需要的afterrender
侦听器。