2017-06-20 10 views
-1

オブジェクトからリスナーをコピーする方法は誰でも知っていますか?Extjs 4.1 - オブジェクトAからオブジェクトBにリスナーをコピーする方法

私は

Object a,b (pre-created...) 
    b.events = a.events 
    b.hasListeners = a.hasListeners 

をしようとしたが、それは私はそれは私が展開するために聞いていた機能で持っていたブレークポイントで停止didntの bをオブジェクトを拡張して、やってのいずれかの「良い方法」がある働いていたdidntのそれ?

+0

両方のオブジェクトは似ています。たとえば、グリッドのobjとPanelオブジェクトがあります。グリッドのitemclickイベントをパネルにコピーすると、work.Soが正しく動作していますか? – Tejas

+0

オブジェクトaはtreenode、bはまたtreenodeです... Sooはい、私はそうしていると思います:X – ioliano

+0

TreeNodeとはどういう意味ですか? NodeInterfaceを実装するもの? –

答えて

2

ExtJSで生成されたオブジェクト階層のサブツリーを他のオブジェクトに直接リンクしないでください。それは悪いスタイルであり、メモリリークや早すぎる破壊のようなあらゆる種類の問題を引き起こす可能性があります。

など。 1つのオブジェクトが破棄されても、他のオブジェクトが存続する場合、共有イベントオブジェクトはどうなりますか?

デストラクタによって破棄される場合もあれば、破棄されない場合もあります。次に、別のオブジェクトがそのオブジェクトにアクセスしようとすると、結果として未定義の動作が発生します。

複数のオブジェクトで同じリスナーが必要な場合は、これらのオブジェクトを派生させたプロトタイプを作成するか、パラメーターとして指定したオブジェクトにこれらのリスナー関数を正確に追加する関数を作成する必要があります。ご例えば

、ノードは読者によって自動的に作成することができますので、私はノードが含まれている店舗に機能を追加すること、第二のアプローチを使用します。

addListenersToTreeNode: function(node) { 
    node.on('collapse', this.onCollapse); 
    node.on('expand', this.onExpand); 
    node.on('example', this.onExample); 
} 

両方に関数を呼び出しますノード:

nodeStore.addListenersToTreeNode(a); 
nodeStore.addListenersToTreeNode(b); 

とvoiláの場合、ツリーノードは同じリスナーを持つようになりました。

+0

優秀な回答!あなたが正しい答えをあなたに与えました... – ioliano

+0

しかし、あなたはディナム的にリスナーをAに追加していますが、リスナーは何を持っているのか分かりません。それをBにdinamicallyどのように再追加できますか? – ioliano

0

クラス内にコードを定義します。 Ext.define( 'appname.myapp.formname.form'、{ XTYPE 'anyname' リスナー:{ クリック........ keyUpイベント..... }})。 xtypeをどこに使用する

関連する問題