考虑以下元素:
<div @click.self.once="eat">Eat <span>me</span></div>
如果我们单击“吃”这个词,一切都会按预期进行。 该事件被触发了一次,我们很高兴。
但是,如果我们单击作为子节点的“我”,然后单击“吃”,则该事件将永远不会触发! 似乎将.once
判断为触发事件太容易了。
我认为.once
应该将其标记为完成,除非它实际上已经被解雇了。
你好,
我不是OP,但我认为我设法重现了他所指的问题。 我在下面附加了JSFiddle进行说明。
单击单词'Eat'可以正常工作:触发事件并更新水果数据。
如果我们重新加载JSFiddle并单击span子元素“ me”,然后单击“ Eat”,则不会更新水果数据。
希望这可以帮助。
@boristhuy感谢您提供JSFiddle。 这正是我的意思。
这应该是一个错误。 当前,事件句柄一旦进入便会被删除,实际上由于修饰符检查,实际上并没有调用该事件句柄。
也许我们需要更新once
代码以支持它。
喜欢
(function(){
var called = false;
return function($events){
// modifiers check
// called check
if (called)return;
called = true;
// handler code
}
})()
至于在渲染函数中使用的once
,将带来重大变化。 我正在尝试找到一种解决此问题的方法。
once
genCode。on: {'~click': handle}
使用的once
做[done],保留旧策略。'~click': handle
'click': handle2
@defcc我通过从被阻止执行的处理程序中返回一个特殊值来修复它。 这可能无法解决您提到的(3)错误,但如有必要,让我们在单独的PR中进行处理。