Отменить привязку
У меня есть хэширование падающих событий -
events:
'click #someButton : 'someFunction'
Чтобы закрыть представление, которое я пробовал
close:
$("#someButton").unbind("click")
и
`close:
$("#someButton").remove()`
Но someFunction все еще запущен более одного раза. Как отменить это событие с помощью кнопки?
Я также пробовал
$(@el).find("#someButton").unbind("click") as well
Ответы
Ответ 1
События события backbone.js делегируются представлению el
(поэтому нет никакого события, связанного с вашим элементом #someButton
, но когда событие click доходит до el
, он проверяет, произошло ли событие из элемента, соответствующего этому селектору), в случае удаления события вам необходимо удалить его из el
, например
$(this.el).off('click', '#someButton');
Если вы хотите удалить все делегированные события, вы можете просто использовать метод undelegate
Ответ 2
Разъяснение и ответ Джека великолепны. К сожалению, его пример кода не работал у меня. Вместо использования:
$(this.el).off('click', '#someButton');
Мне пришлось использовать:
this.$el.off('click', '#someButton');
что имеет смысл для меня, потому что событие было привязано к объекту this.$el
.
Ответ 3
Чтобы добавить далее, я использовал this.$el.off();
внутри инициализации в подвью, чтобы уничтожить все события, связанные с подвью. Одно и то же событие запустило бы X раз, когда вызывалось обновление данных.
Я видел дублированные цели, используя:
var $target = $(e.currentTarget);
console.log($target);
Я бы добавил комментарий к ответу, но у меня низкая репутация.