Vue: .once no va bien con .self

Creado en 2 feb. 2017  ·  6Comentarios  ·  Fuente: vuejs/vue

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.

bug

Todos 6 comentarios

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ó.

¿Por qué se requiere esto?

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.

JSFiddle

  1. Hacer clic en la palabra 'Comer' funciona como se esperaba: se activa el evento y se actualizan los datos de la fruta.

  2. 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.

  1. [wip] actualiza once genCode para la plantilla.
  2. [hecho] por once usado en la función de renderización on: {'~click': handle} , mantenga la vieja estrategia.
  3. [hecho] existe un error en updateListeners para el siguiente caso:
    antiguo: '~click': handle
    nuevo: '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.

¿Fue útil esta página
0 / 5 - 0 calificaciones