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

Смежные вопросы