主干多个事件处理程序问题:同一事件只调用一个方法

Backbone multiple event handlers issue: only one method called for the same event

本文关键字:事件 调用 方法 一个 事件处理 程序 问题      更新时间:2023-09-26

我有一个骨干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) {
       ...
   }
});

现在,我的blur . socialinput调用getSocial,但是我的submit #book_form没有。但是,控制台中没有任何错误。

因为在BooksView中已经有了submit的事件处理程序,它可能是首先被调用的。但是在处理程序中,你调用e.preventDefault(),它阻止提交事件到达BookSocialView.getSocial()

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