Backbone多事件处理程序问题:只有一个方法为同一事件调用

时间:2014-06-24 17:51:24

标签: javascript jquery events backbone.js

我有一个主干js应用程序,它有一个视图和许多子视图。

我的代码如下:

var BooksView = Backbone.View.extend({

   events: {
      "submit #book_form": "createBook"
   },

   render: function() {
      var bookSocialView = new BookSocialView({
          el: $('#the_books_social_div')
      });
      bookSocialView.render();
   },

   createBook: function(e){
      e.preventDefault();
      ...
   }

});

和我的bookSocialView看起来像:

var BookSocialView = Backbone.View.extend({
   events: {
      "blur .socialInput": "getSocial",
      "submit #book_form": "getSocial"
   },
   render: function () {
    ...
   },
   getSocial: function (e) {
       ...
   }
});

现在,我的模糊.socialInput调用了getSocial,但我的提交#book_form并没有。但是,控制台中没有任何错误。

1 个答案:

答案 0 :(得分:2)

由于submit中已有BooksView的事件处理程序,因此可能首先调用它。但是在处理程序中,您调用e.preventDefault()并阻止提交事件到达BookSocialView.getSocial()

最好重新考虑围绕book_form提交逻辑的策略。如果你想要多个处理程序工作,但也希望防止表单sumbission,我建议使用custom events。您处理程序仍然可以执行e.preventDefault(),但也应触发其他事件,例如myModel.trigger('refreshSocial')