【问题标题】:Sencha touch 2 Event listeners in Ext.DefineSencha touch 2 Ext.Define 中的事件监听器
【发布时间】:2013-05-03 20:45:52
【问题描述】:

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

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

我见过很多 S.O. Ext.define() 中有 listeners 的答案。

我也看到了这篇关于 the evils of Ext.define and listeners 的博文,但我认为这与 Ext-Js 的相关性比与 Sencha Touch 2 的相关性更高。而且我对 Sencha Touch 还很陌生。

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

【问题讨论】:

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


    【解决方案1】:

    这个问题很基本。如果您的类中有 listener 属性,那么当您创建该类的实例并将 listener 属性 添加到该特定实例时,就会覆盖 Ext.define ' s 监听器属性。就像这样:

    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!'
    });
    

    你会得到foo 对象的bar 属性吗?不会。相同的属性会被覆盖。类似的事情也会发生在听众身上。

    Ext.define('ABC', {
      config : {
        listeners : {
          'tap' : Ext.emptyFn
        } 
      }
    });    
    
    var newPanel = Ext.create('ABC', {
      listeners : {
          'activate' : Ext.emptyFn
      } 
    });
    

    Ext.create 传入的配置对象与Ext.define 的配置对象合并。所以,不要在Ext.define 中使用listener 属性总是一个更好的选择。

    【讨论】:

    • 但是如果我只在Ext.define 中定义了我的所有监听器(并且在 Ext.create 中没有监听器),那么合并不会覆盖监听器配置,我仍然会有监听器吗?
    • 是的,那么就没有问题了。但是你为什么要注入这样的东西呢?而是使用 Simeons 的选项在初始化函数中添加带有 on() 方法的侦听器,您将得到一切。
    • @Swar 我是煎茶触摸初学者。 Simeons's option to add the listener with on() 是什么?
    • 问题中给出了链接:“Ext.define and listeners的邪恶”
    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多