Betrachten Sie folgendes Element:
<div @click.self.once="eat">Eat <span>me</span></div>
Wenn wir auf "Essen" klicken, funktioniert alles wie erwartet. Die Veranstaltung wird einmal gefeuert und wir freuen uns.
Aber wenn wir auf "mich" klicken, was ein untergeordneter Knoten ist, und dann auf "Essen" klicken, wird das Ereignis niemals ausgelöst! Es scheint, als wäre .once
zu einfach, um ein Ereignis als ausgelöst zu beurteilen.
Ich denke, .once
sollte es nur dann als erledigt markieren, wenn es tatsächlich abgefeuert wurde.
Vielen Dank, dass Sie das Problem eingereicht haben. Befolgen Sie die Richtlinien zur Problemmeldung und geben Sie eine minimale JSFiddle oder JSBin an, die eine Reihe reproduzierbarer Schritte enthält, die zu dem von Ihnen beschriebenen Verhalten führen können.
Hallo,
Ich bin nicht der OP, aber ich glaube, ich habe es geschafft, das Problem, auf das er sich bezog, zu reproduzieren. Ich habe unten eine JSFiddle zur Veranschaulichung angehängt.
Das Klicken auf das Wort "Essen" funktioniert wie erwartet: Das Ereignis wird ausgelöst und die Fruchtdaten werden aktualisiert.
Wenn wir die JSFiddle neu laden und auf das untergeordnete Element span 'me' und dann auf 'Eat' klicken, werden die Fruchtdaten nicht aktualisiert.
Hoffe das hilft.
@boristhuy Vielen Dank, dass Sie JSFiddle zur Verfügung gestellt haben. Genau das habe ich gemeint.
Dies sollte ein Fehler sein. Derzeit wird das Ereignishandle entfernt, sobald es eingegeben wird. Tatsächlich wird es aufgrund der Modifikatorprüfung nicht aufgerufen.
Möglicherweise müssen wir den Code once
aktualisieren, um ihn zu unterstützen.
mögen
(function(){
var called = false;
return function($events){
// modifiers check
// called check
if (called)return;
called = true;
// handler code
}
})()
Was once
betrifft, das in der Renderfunktion verwendet wird, würde dies eine bahnbrechende Änderung bringen. Ich versuche einen Weg zu finden, um dieses Problem zu beheben.
once
genCode für Vorlage aktualisieren.once
das in der Renderfunktion on: {'~click': handle}
wird, die alte Strategie bei.'~click': handle
'click': handle2
@defcc Ich habe das Handlern zurückgegeben habe, deren Ausführung verhindert wurde. Dies behebt möglicherweise nicht den von Ihnen erwähnten (3) Fehler, aber lassen Sie uns dies bei Bedarf in einer separaten PR behandeln.