Sencha在Ext.Define中触摸2个事件监听器

时间:2013-05-09 11:27:39

标签: extjs extjs4 sencha-touch sencha-touch-2

我正在阅读有关事件处理和侦听器配置的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()中添加侦听器的不同之处吗?它有什么区别?

1 个答案:

答案 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属性。