2013-04-25 3 views
2

내가 정의 관측 개체가 다음했습니다의 ExtJS 4 관측 개체의 모든 청취자를 얻을

Ext.define ('MyObject', { 
    mixins: { 
    observable: 'Ext.util.Observable' 
    } , 
    constructor: function (cfg) { 
    this.initConfig (cfg); 
    this.mixins.observable.constructor.call (this, cfg); 
    ... 
    } 
}); 

을 다음, 나는 약간의 청취자를이 개체의 인스턴스를 생성하고 첨부 :

var obj = Ext.create ('MyObject', {...}); 
obj.on ({ 
    first: function() {...} , 
    second: function() {...} , 
    third: function() {...} , 
    fourth: function() {...} 
}); 

결국, 나는 obj 인스턴스를 파기 할 것이지만,이 시점에서 나는 이전에 첨부 된 모든 리스너를 저장해야한다. 왜냐하면 나는 화가 났기 때문에, 'MyObject'의 또 다른 인스턴스를 만들 필요가있다. 'obj', 청취자 포함.

질문 : 관찰 대상 개체의 모든 수신기를 저장하려면 어떻게해야합니까?

정말 고마워요!

+0

생성자에서 리스너를 설명하지 않는 이유는 무엇입니까? 객체의 initComponent? 아니면 그 질문을 이해하지 못합니까? – Vlad

+0

어떤 청취자가 그 객체에 부착 될지 알지 못하기 때문에. – Wilk

답변

5

당신은 당신의 개체에 대한 getListeners() 메소드를 만들 시도 할 수 있습니다 :

Ext.define ('MyObject', { 

    ... 

    getListeners: function() { 
     var me = this, 
      l = {}; 
     for(var event in me.hasListeners) { 
      Ext.each(me.events[event].listeners, function(listener) { 
       l[event] = listener.o[event]; 
      }); 
     } 
     return l; 
    } 
}); 

... 

var listeners = obj.getListeners(); 
obj.destroy(); 

obj2.on(listeners); 

jsfiddle을 참조하십시오 : http://jsfiddle.net/8GMsp/

을 : 나는 실제 응용 프로그램에서 사용하려고하지 않았습니다. 개정이 필요할 수 있습니다.

+1

힌트를 보내 주셔서 감사합니다! 솔루션 개선 : 지금은 단일 이벤트의 여러 수신자를 저장할 수 있습니다. – Wilk

+1

실제 예 : https://gist.github.com/wilk/5472503 – Wilk

+1

@Wilk 좋습니다. 별도의 메서드 인 setListeners()로 리스너를 추가하면 쉽게 처리 할 수 ​​있다고 생각합니다. https://gist.github.com/werdender/5472782 – Vlad