我正在阅读有关事件处理和侦听器配置的sencha文档。 在the listener config的文档中,我发现了这个注释:
注意:在使用Ext.define()定义类时,指定侦听器的配置是不好的做法。相反,只有在使用Ext.create()实例化类时才指定侦听器。
我见过很多S.O. Ext.define()
中包含听众的答案。
此外,我还发表了关于the evils of Ext.define and listeners的博客文章,但我认为这与Ext-Js相比更相关而不是Sencha Touch 2.而且我对Sencha Touch来说相当新。 / p>
任何人都可以解释在Ext.define()中添加侦听器的不同之处吗?它有什么区别?
答案 0 :(得分:3)
问题非常基本。如果您的类中有listener
属性,那么在您创建类的实例并将 listener
属性添加到该特定实例的那一刻,就可以覆盖它Ext.define的监听器属性。就像这样:
var obj = {
foo: {
bar : 'Hello World'
}
};
obj = Ext.merge(obj, { // Here Ext.merge just to show how two objects can be merged
foo : 'I just got changed!'
});
您是否会获得bar
对象的foo
属性?不会。相同的属性会被覆盖。听众也会发生类似的事情。
Ext.define('ABC', {
config : {
listeners : {
'tap' : Ext.emptyFn
}
}
});
var newPanel = Ext.create('ABC', {
listeners : {
'activate' : Ext.emptyFn
}
});
您在Ext.create
中传递的配置对象与Ext.define
的配置对象合并。因此,最好不要在listener
中使用Ext.define
属性。