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.
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.
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.
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.
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.
once
jour once
utilisé dans la fonction de rendu on: {'~click': handle}
, gardez l'ancienne stratégie.'~click': handle
'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.