2015-12-08 2 views
1

Некоторые из наших устаревших кодов создают слушатели с on и анонимными функциями. У этих слушателей есть ограниченная продолжительность жизни.ExtJS 5.0 - Вызов un или removeEventListener во время прослушивания?

код что-то вроде этого:

me.getEl().on(someCondition()? 'mousedown': 'touchstart', 
    function(event) { 
     if (someOtherCondition()) { 
      destroyStuff(); 
      // We don't need this listener any more! 
      // *** 
     } 
    } 
); 

Проверка использования ресурсов в качестве запуска приложения, эти зомби слушатели накапливаются и, в особенности тех наведений мыши, использовать много ресурсов и циклов.

Есть ли способ использовать un или removeEventListener ниже комментария // *** и удалить слушателя? Скажите что-нибудь в этих строках:

event.target.removeEventListener(event.type, /* reference this anonymous function? */); 

ответ

3

У вас есть несколько вариантов.

  • on принимает options параметр, который может содержать single:true, если она должна быть выполнена только один раз. Я думаю, что это не сработает для вашего примера, потому что слушатель можно вызвать несколько раз, но, возможно, для некоторых из ваших случаев использования, которые не имеют условия.
  • mon с destroyable: true для создания потрясающих слушателей. Эти слушатели могут быть удалены с помощью mun.
+0

'mon' устарел в ExtJS5 - просто используйте 'on'. Который, как вы говорите, может принять параметр 'destroyable: true', чтобы вернуть обработчик для удаления слушателя. –

+0

Это не имеет никакого смысла, потому что обычно вы отказываетесь от вещей, которые удаляются из источника в более поздней версии. В 6.0.1 «mon» больше не устаревает, по крайней мере, не в соответствии с документами. – Alexander

+0

Спасибо, я использовал 'single: true' для тех случаев, для которых он был применен. Другие, положить в TODO для кого-то еще, чтобы сделать это! –