Vue: .once ne va pas bien avec.

Créé le 2 févr. 2017  ·  6Commentaires  ·  Source: vuejs/vue

Considérez l'élément suivant:

<div @click.self.once="eat">Eat <span>me</span></div>

Si nous cliquons sur le mot «Eat», tout fonctionne comme prévu. L'événement est déclenché une fois et nous sommes heureux.

Mais si on clique sur "moi", qui est le nœud enfant, puis on clique sur "Eat", l'événement ne sera jamais déclenché! Il semble que .once est trop facile pour juger un événement comme étant déclenché.

Je pense que .once ne devrait le marquer comme terminé que s'il a été déclenché en fait.

bug

Tous les 6 commentaires

Merci d'avoir signalé le problème. Veuillez suivre les consignes de rapport de problème et fournir un JSFiddle ou JSBin minimal contenant un ensemble d'étapes reproductibles pouvant conduire au comportement que vous avez décrit.

Pourquoi est-ce nécessaire?

Salut,

Je ne suis pas l'OP mais je pense avoir réussi à reproduire le problème auquel il faisait référence. J'ai joint un JSFiddle ci-dessous à titre d'illustration.

JSFiddle

  1. Cliquer sur le mot «Eat» fonctionne comme prévu: l'événement est déclenché et les données sur les fruits sont mises à jour.

  2. Si nous rechargons le JSFiddle et cliquons sur l'élément enfant span 'me', puis sur 'Eat', les données de fruits ne sont pas mises à jour.

J'espère que cela t'aides.

@boristhuy Merci d'avoir fourni JSFiddle. C'est exactement ce que je voulais dire.

Cela devrait être un bug. Actuellement, le descripteur d'événement sera supprimé une fois entré, en fait il n'est pas appelé en effet à cause de la vérification des modificateurs.

Peut-être que nous devons mettre à jour le code once pour le prendre en charge.

Comme

(function(){
  var called = false;
  return function($events){
    // modifiers check
    // called check
    if (called)return;
    called = true;
    // handler code
  }
})()

Quant à once utilisé dans la fonction de rendu, cela apporterait un changement radical. J'essaie de trouver un moyen de résoudre ce problème.

  1. [wip] mettre once jour
  2. [done] pour once utilisé dans la fonction de rendu on: {'~click': handle} , gardez l'ancienne stratégie.
  3. [done] il existe un bogue dans updateListeners pour le cas ci-dessous:
    ancien: '~click': handle
    nouveau: 'click': handle2

@defcc Je l'ai corrigé en renvoyant une valeur spéciale à partir des gestionnaires qui ne peuvent pas être exécutés. Cela peut ne pas résoudre le bogue (3) que vous avez mentionné, mais gérons cela dans un PR séparé si nécessaire.

Cette page vous a été utile?
0 / 5 - 0 notes