Подтвердить что ты не робот

Отменить привязку

У меня есть хэширование падающих событий -

events:
  'click #someButton : 'someFunction'

Чтобы закрыть представление, которое я пробовал

close:
  $("#someButton").unbind("click")

и

   `close:

       $("#someButton").remove()`

Но someFunction все еще запущен более одного раза. Как отменить это событие с помощью кнопки?

Я также пробовал

$(@el).find("#someButton").unbind("click") as well 
4b9b3361

Ответ 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);

Я бы добавил комментарий к ответу, но у меня низкая репутация.