我正在尝试完成一项琐碎的任务:
只要输入焦点不清晰,通过focus-out
或当用户按下enter
时,都有一个输入框会触发一些操作。
所以我在模板中有这个:
{{input
id=inputId
value=newValue
placeholder=placeholder
focus-out=(action 'accept')
}}
当用户在输入框之外单击时,focus-out
显然会触发。
然后在组件中,我有一个用于Enter键的事件处理程序:
import Component from '@ember/component';
export default Component.extend({
keyDown(e) {
if (e.keyCode === 13) {
this.send('accept', this.get('newValue'))
}
},
actions: {
accept(value){
console.log('Accepted new value: ' + value)
}
}
}
问题是,每当我按下enter
时,它都会总是触发accept
动作两次。我已经尝试过一些锁定机制,但是它总是最终触发两次。我猜一次是enter
,一次是focus-out
。是否可以使用once
函数或类似方法将accept
置于运行循环中?
任何事情都将不胜感激。谢谢。