4

イベント処理とリスナー設定に関するsencha docsを読んでいました。リスナー構成のドキュメントで、次のメモを見つけました。

注: Ext.define() を使用してクラスを定義するときに、リスナーの構成を指定するのは悪い習慣です。代わりに、クラスを Ext.create() でインスタンス化するときにのみリスナーを指定してください。

にリスナーを持つ多くの SO 回答を見てきましたExt.define()

また、Ext.define とリスナーの弊害に関するこのブログ投稿に出くわしましたが、これはSencha Touch 2 よりも Ext-J に関連していると思います。

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構成オブジェクトは、 の構成オブジェクトとマージされますExt.definelistenerしたがって、 でプロパティを使用しない方が常に良い選択Ext.defineです。

于 2013-05-09T13:31:59.800 に答える