【问题标题】:Trigger either event but not both in backbone.js在backbone.js中触发任一事件但不能同时触发
【发布时间】:2012-06-29 22:34:28
【问题描述】:

我正在模拟一个待办事项列表,当文本字段失去焦点或用户按下回车键时,文本字段的值会保存在模型中。

//view etc.
events:{
    "blur .task": "doneEditing",
    "keypress .task": "doneEditing"
},
doneEditing: function(e){
    if(e.which && e.which != 13) return;
    e.preventDefault();
    //model saving code
}

问题是按键回车触发doneEditing,然后模糊发生并再次触发doneEditing。我可以使用一些技巧来找到解决方法,但我想知道主干是否有办法只触发任一事件。

谢谢。

【问题讨论】:

    标签: javascript backbone.js backbone-events


    【解决方案1】:

    如果这两个事件发生在很短的时间间隔内,您可以使用underscore.js 库的(Backbone 的硬依赖,所以无论如何你都会拥有它)throttle-方法来在短时间内停止过多的调用。这是documentation的链接。

    还有一个例子:

    doneEditing: _.throttle(function(e) {
      // Copy your event handling here
    }, 100), // The number here defines the time threshold within which the function can be called only once
    

    希望对您有所帮助!

    【讨论】:

    • 这似乎有点骇人听闻。但我会一直使用它,直到出现更好的解决方案。谢谢!
    【解决方案2】:

    使用e.stopPropagation() 或只返回false(从jQuery 开始,它同时调用preventDefaultstopPropagation)。 DOM 事件传播超出了 Backbone 的范围,对于这么简单的事情,不需要 helpers。

    【讨论】:

    • 谢谢,但就我而言,这不起作用。也许我误解了 stopPropagation 的工作原理,但我认为它不应该在 same 元素上停止两次触发同一事件。
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2012-05-07
    • 1970-01-01
    • 2012-04-16
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多