1

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

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

谢谢。

4

2 回答 2

2

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

还有一个例子:

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

希望这有帮助!

于 2012-06-29T14:28:54.317 回答
0

使用e.stopPropagation()或仅返回false(它同时调用jQuerypreventDefaultstopPropagationas of jQuery)。DOM 事件传播超出了 Backbone 的范围,对于这么简单的事情,不需要帮助程序。

于 2012-06-29T14:08:50.600 回答