2010-01-30 2 views
3

Когда я .destroy() a Element объект в MooTools, делает. destroy() автоматически внутренне вызывает element.removeEvents(), или мне нужно помнить об этом. (Я удаляю элементы из DOM, которые ранее были element.addEvent() называется.)MooTools: destroy() и события

ответ

2

.destroy() в MooTools, версия 1.2.4:

destroy: function(){ 
    Element.empty(this); 
    Element.dispose(this); 
    clean(this, true); 
    return null; 
} 

чистый (пункт, сохранить) функция делает .removeEvents(), если браузер нуждается в нем:

var clean = function(item, retain){ 
    .... 
    if (item.clearAttributes){ 
     var clone = retain && item.cloneNode(false); 
     item.clearAttributes(); 
     if (clone) item.mergeAttributes(clone); 
    } else if (item.removeEvents){   
    .... 
}; 

Вы должны быть безопасными, это слив элементов.

Кроме того, кредит на весь код выше MooTools конечно: http://mootools.net/

+0

Нет, если браузер поддерживает его, но если 'item' отправлен на' clean() 'функцию. 'removeEvents()' является самой функцией Mootools, а не встроенной функцией. –

+0

@ Håvard S - Вообще-то я урезал некоторую логику, он завернут в 'if (Browser.Engine.trident) {', а также, в основном, проверку IE ... другие браузеры уже корректно удаляют события, это только память IE утечка. Я изменил приведенные выше «поддержки» на «потребности» ... надеюсь, более ясный ответ. –

2

Да, Mootools будет вызывать removeEvents() при вызове destroy() на элементе.

(Текущая реализация делает это в функции, называемой clean(), которая вызывается от destroy()).

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