Vue: .once passt nicht gut zu .self

Erstellt am 2. Feb. 2017  ·  6Kommentare  ·  Quelle: vuejs/vue

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.

bug

Alle 6 Kommentare

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.

Warum ist das erforderlich?

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.

JSFiddle

  1. Das Klicken auf das Wort "Essen" funktioniert wie erwartet: Das Ereignis wird ausgelöst und die Fruchtdaten werden aktualisiert.

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

  1. [wip] once genCode für Vorlage aktualisieren.
  2. [erledigt] Behalten Sie für once das in der Renderfunktion on: {'~click': handle} wird, die alte Strategie bei.
  3. [erledigt] Es gibt einen Fehler in updateListeners für den folgenden Fall:
    alt: '~click': handle
    neu: '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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen