【问题标题】:Backbone multiple event handlers issue: only one method called for the same event骨干多事件处理程序问题:同一事件只调用一种方法
【发布时间】:2014-08-15 02:28:48
【问题描述】:

我有一个主干 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,但我的提交 #book_form 没有。不过,控制台中没有任何错误。

【问题讨论】:

    标签: javascript jquery events backbone.js


    【解决方案1】:

    由于您已经在BooksView 中为submit 提供了一个事件处理程序,因此它可能是最先调用的。但是在你调用e.preventDefault()的处理程序内部,它会阻止提交事件到达BookSocialView.getSocial()

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

    【讨论】:

    • 感谢您的回答。不知道有没有办法自动调用blur,所以表单提交的时候会自动失去焦点?
    • 要放松焦点,它需要移动到某个地方。只需找到其他需要关注的内容并致电$el.focus()
    • 好的,谢谢。另一个问题:焦点结束时不会触发模糊吗?为什么我可以单击提交按钮而不会在表单元素上触发模糊?
    • 提交按钮通常在表单内。当焦点移出元素时调用模糊。当您单击提交时,技术上的焦点仍保留在表单中。附带说明一下,我发现模糊事件在大多数情况下是无用的,因为有更好的方法来实现相同的功能。
    • 好吧,这是有道理的。是否有一个事件可以用来实现与 Blur 基本相同的功能,但是在单击提交按钮时它会失去焦点?
    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多