4

我正在阅读有关事件处理和侦听器配置的 sencha 文档。在侦听器配置的文档中,我发现了这个注释:

注意:使用 Ext.define() 定义类时,指定监听器的配置是不好的做法。相反,仅在使用 Ext.create() 实例化类时指定侦听器。

我已经看到了一些 SO 答案,它们Ext.define().

我还看到这篇关于Ext.define 和听众的邪恶的博客文章,但我认为这与 Ext-Js 比与 Sencha Touch 2更相关。而且我对 Sencha Touch 还很陌生。

谁能解释在 Ext.define() 中添加侦听器的不同缺点以及它有什么不同?

4

1 回答 1

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的 config 对象与Ext.define. 所以,不使用listener属性总是一个更好的选择Ext.define

于 2013-05-09T13:31:59.800 回答