backbone.js — наведение курсора мыши уничтожает события в представлениях

#events #backbone.js #views #mouseover

#Мероприятия #backbone.js #число просмотров #наведение курсора мыши

Вопрос:

Это простое приложение для выполнения задач, в котором в настоящее время отображается только несколько представлений li в представлении коллекции ul. Я пытаюсь вызвать событие щелчка для запуска простой функции showAlert

Если я наведу курсор мыши на одно из представлений задач (li) и обновлю страницу, чтобы моя мышь в конечном итоге зависала над этим конкретным li после перезагрузки, событие click отключит мою функцию showAlert.

Проблема в том, что как только я перемещаю мышь (скорее всего, вызывая событие наведения курсора мыши), я теряю событие щелчка во всех представлениях задач (li), включая представление, над которым я изначально зависал.

Основываясь на всех сообщениях, которые я смог найти, тесно связанных с этой проблемой, я пытался использовать this.delegateEvents() в разных местах, но безуспешно.

Предыдущий код

 (function() {

  window.App = {
    Models: {},
    Collections: {},
    Views: {}
  };

  window.template = function(id) {
    return _.template( $('#'   id).html() );
  };

  App.Models.Task = Backbone.Model.extend({});

  App.Collections.Tasks = Backbone.Collection.extend({
    model: App.Models.Task
  });

  App.Views.Tasks = Backbone.View.extend({
    tagName: 'ul',

    render: function() {
      this.collection.each(this.addOne, this);
      return this;
    },

    addOne: function(task) {
      var taskView = new App.Views.Task({ model: task });
      this.$el.append(taskView.render().el);
    }
  });
 

Это рассматриваемый вид

   App.Views.Task = Backbone.View.extend({
    tagName: 'li',

    events: {
      'click': 'showAlert'
    },

    showAlert: function() {
      alert('yes!');
    },

    render: function() {
      this.$el.html( this.model.get('title') );
      return this;
    }
  });
 

продолжающийся код

   var tasksCollection = new App.Collections.Tasks([
    {
      title: 'Task 1',
      priority: 3
    },
    {
      title: 'Task 2',
      priority: 4
    },
    {
      title: 'Task 3',
      priority: 5
    }
  ]);

  var tasksView = new App.Views.Tasks({ collection: tasksCollection });
  $('.tasks').html(tasksView.render().el);

})();
 

Комментарии:

1. Кажется, работает нормально jsbin.com/fujimiri/1

2. спасибо, Джек, я связал src своего основного скрипта с src, который вы указали в jashkenas.github.io/backbone/backbone-min.js , это сработало, а затем я вернулся к своей локальной версии разработки, и она работает? Очень странно, но спасибо

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