Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   destroy, unstroy (https://javascript.ru/forum/dom-window/59939-destroy-unstroy.html)

Алексей Петрович 03.12.2015 22:45

destroy, unstroy
 
Можете подсказать, как реализуются данные методы JQuery плагинов. Как лучше делать.

Пытался реализовать несколько раз, но понимания как это делать не приходит и из-за этого возникают проблемы.

рони 03.12.2015 23:00

Алексей Петрович,
destroy -- метод удаления плагина, удаляются элементы созданные плагином и обработчики, что удалить с помощью .remove() или off() перечислить самому

Алексей Петрович 03.12.2015 23:23

Что делает off()?

А если отключать обработчик событий, к примеру on('click') ну или другой, а пользовательские обработчики не отлучаться? И как этого можно избежать?

рони 03.12.2015 23:30

Цитата:

Сообщение от Алексей Петрович
Что делает off()?

Off

Алексей Петрович 03.12.2015 23:37

$('#foo').off('click'); // удалим все обработчики события 'click' у элемента foo
Цитата из переведённой статьи.

Как этого избежать? Будет ли правильным такой подход?
var $element = $('#element');

// Где то в коде
$element.on('click', function () {
    $(this).trigger('myplugin.click');
});
$element.on('myplugin.click', function() {
    // Что то
});

// В методе destoy
$element.off('myplugin.click');

рони 03.12.2015 23:42

Алексей Петрович,
а что функции имя сложнее дать?
var $element = $('#element');


function x() {
   //
}

$element.on('click', x);
$element.off({'click' : x});

Алексей Петрович 03.12.2015 23:48

Блин, даже не думал об этом, не догадывался и не разу так не делал. Надо попробовать.

Rise 04.12.2015 00:20

Алексей Петрович, такая конструкция здесь лишняя
$element.on('click', function () {
    $(this).trigger('myplugin.click');
});

Пространство имен пишится так
var $element = $('#element');
$element.on('click.myplugin', function() {
    // Что то
});
$element.off('click.myplugin');

рони 04.12.2015 00:35

Цитата:

Сообщение от Rise
рони, разве x будет доступна из вне?

обеспечение видимости в руках создателя плагина - код выше условный но поправил.
как пример
Цитата:

.unbind("click", this._doClick);


Часовой пояс GMT +3, время: 22:52.