我正在模拟一个待办事项列表,当文本字段的值失去焦点或用户按下回车键时,文本字段的值会保存在模型中。
//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。我可以使用一些技巧来找到解决方法,但我想知道骨干网是否只能触发其中一个事件。
感谢。
答案 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开始调用preventDefault
和stopPropagation
)。 DOM事件传播超出了Backbone的范围,对于这么简单的事情,不需要帮助者。