在backbone.js中触发任一事件但不同时触发两者

时间:2012-06-29 14:05:58

标签: javascript backbone.js backbone-events

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

//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。我可以使用一些技巧来找到解决方法,但我想知道骨干网是否只能触发其中一个事件。

感谢。

2 个答案:

答案 0 :(得分:2)

如果这两个事件在很短的时间间隔内发生,你可以使用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

希望这有帮助!

答案 1 :(得分:0)

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