Vue: Instanz $dispatch gibt den Wert nicht zurück

Erstellt am 31. Jan. 2016  ·  3Kommentare  ·  Quelle: vuejs/vue

Hallo, ich bin etwas verwirrt über das vm.$dispatch da ich erwartet hatte, dass es Werte aus dem Rückruf des Listeners für weitere Logik zurückgibt, die nicht in den Rückruf _(imo)_ eingefügt werden konnten, aber es stellte sich heraus, dass es der Instanz es selbst. Ich lerne Vue und habe wahrscheinlich etwas verpasst.

var vm = new Vue({
    // omitted
    events: {
        'object:creating' : function (args) {
            // omitted
            return false;
        },
        'object:created' : function (args) {
            // omitted
        }
    }
});

var child = new Vue({
    parent: vm,
    // omitted
    methods: {
        performWhatever: function (args) {
            //
        },
        createObject: function (args) {
            // Pre-create
            if ( this.$dispatch('object:creating', args) === false ) {
                // Stop the creation
            }
            // The business logic
            this.performWhatever(args);

            // Post-create
            this.$dispatch('object:created', args);
        }
    }
})

Wie Sie sehen, ist die Vorerstellungsoperation optional.
Dankeschön.

Hilfreichster Kommentar

  1. $dispatch hat keinen Rückgabewert.
  2. Die Verwendung des Ereignissystems ($dispatch, $emit usw.) bedeutet, dass Ihr Code asynchron ist, was bedeutet, dass der Empfänger der Nachricht entscheidet, was als nächstes passiert, also schreiben Sie nicht so etwas wie
    SomeAsyncCode === false
  3. In der Javascript-Welt verwenden wir Callbacks, um asynchrone Logik zu handhaben (Versprechen sind besser, aber hier nicht anwendbar), und $dispatch erwartet, dass Sie mehrere Argumente einschließlich einer Callback-Funktion übergeben.
  4. Daher brauchen Sie das tatsächlich:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

und auf der Empfängerseite,

events: {
    'object:creating' : function (args, callback) {
        // Do something with args and fire callback (or not)
        callback()
    }
}

Alle 3 Kommentare

  1. $dispatch hat keinen Rückgabewert.
  2. Die Verwendung des Ereignissystems ($dispatch, $emit usw.) bedeutet, dass Ihr Code asynchron ist, was bedeutet, dass der Empfänger der Nachricht entscheidet, was als nächstes passiert, also schreiben Sie nicht so etwas wie
    SomeAsyncCode === false
  3. In der Javascript-Welt verwenden wir Callbacks, um asynchrone Logik zu handhaben (Versprechen sind besser, aber hier nicht anwendbar), und $dispatch erwartet, dass Sie mehrere Argumente einschließlich einer Callback-Funktion übergeben.
  4. Daher brauchen Sie das tatsächlich:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

und auf der Empfängerseite,

events: {
    'object:creating' : function (args, callback) {
        // Do something with args and fire callback (or not)
        callback()
    }
}

Danke @fnlctrl für die Erklärung :)

@fnlctrl Danke für die

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

robertleeplummerjr picture robertleeplummerjr  ·  3Kommentare

franciscolourenco picture franciscolourenco  ·  3Kommentare

bfis picture bfis  ·  3Kommentare

loki0609 picture loki0609  ·  3Kommentare

paceband picture paceband  ·  3Kommentare