Considere el siguiente elemento:
<div @click.self.once="eat">Eat <span>me</span></div>
Si hacemos clic en la palabra "Comer", todo funciona como se esperaba. El evento se va a despedir una vez y estamos felices.
Pero si hacemos clic en "yo", que es el nodo hijo, y luego hacemos clic en "Comer", ¡el evento nunca se activará! Parece que .once
es demasiado fácil para juzgar un evento como despedido.
Creo que .once
debería marcarlo como hecho solo si se ha disparado de hecho.
Gracias por presentar el problema. Siga las Pautas para la notificación de problemas y proporcione un JSFiddle o JSBin mínimo que contenga un conjunto de pasos reproducibles que pueden conducir al comportamiento que describió.
Hola,
No soy el OP, pero creo que logré reproducir el problema al que se refería. Adjunté un JSFiddle a continuación para ilustrarlo.
Hacer clic en la palabra 'Comer' funciona como se esperaba: se activa el evento y se actualizan los datos de la fruta.
Si recargamos JSFiddle y hacemos clic en el elemento secundario span 'me', y luego en 'Eat', los datos de la fruta no se actualizan.
Espero que esto ayude.
@boristhuy Gracias por proporcionar JSFiddle. Eso es exactamente lo que quise decir.
Esto debería ser un error. Actualmente, el identificador de eventos se eliminará una vez que ingrese, de hecho, no se invoca debido a la verificación de modificadores.
Tal vez necesitemos actualizar el código once
para admitirlo.
me gusta
(function(){
var called = false;
return function($events){
// modifiers check
// called check
if (called)return;
called = true;
// handler code
}
})()
En cuanto a once
usado en la función de renderizado, traería un cambio radical. Estoy tratando de encontrar una forma de solucionar este problema.
once
genCode para la plantilla.once
usado en la función de renderización on: {'~click': handle}
, mantenga la vieja estrategia.'~click': handle
'click': handle2
@defcc Lo arreglé devolviendo un valor especial de los controladores que no pueden ejecutarse. Es posible que esto no solucione el error (3) que mencionó, pero manejemos eso en un PR separado si es necesario.