Vue: L'instance $dispatch ne renverra pas la valeur

Créé le 31 janv. 2016  ·  3Commentaires  ·  Source: vuejs/vue

Salut, je suis un peu confus au sujet du vm.$dispatch car je m'attendais à ce qu'il renvoie des valeurs du rappel de l'auditeur pour plus de logique qui ne pouvait pas être placé dans le rappel _(imo)_ mais il s'est avéré être le exemple lui-même. J'apprends Vue et j'ai probablement raté quelque chose.

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);
        }
    }
})

Comme vous pouvez le voir, l'opération de pré-création est facultative.
Merci.

Commentaire le plus utile

  1. $dispatch n'a pas de valeur de retour.
  2. L'utilisation du système d'événements ($dispatch, $emit et ainsi de suite) signifie que votre code sera asynchrone, ce qui signifie que ce qui se passe ensuite est décidé par le destinataire du message, vous n'écrivez donc pas quelque chose comme
    SomeAsyncCode === false
  3. Dans le monde javascript, nous utilisons des rappels pour gérer la logique asynchrone (les promesses sont meilleures mais ce n'est pas applicable ici), et $dispatch s'attend à ce que vous passiez plusieurs arguments, y compris une fonction de rappel.
  4. Voici donc ce dont vous avez réellement besoin :
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

et du côté du récepteur,

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

Tous les 3 commentaires

  1. $dispatch n'a pas de valeur de retour.
  2. L'utilisation du système d'événements ($dispatch, $emit et ainsi de suite) signifie que votre code sera asynchrone, ce qui signifie que ce qui se passe ensuite est décidé par le destinataire du message, vous n'écrivez donc pas quelque chose comme
    SomeAsyncCode === false
  3. Dans le monde javascript, nous utilisons des rappels pour gérer la logique asynchrone (les promesses sont meilleures mais ce n'est pas applicable ici), et $dispatch s'attend à ce que vous passiez plusieurs arguments, y compris une fonction de rappel.
  4. Voici donc ce dont vous avez réellement besoin :
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

et du côté du récepteur,

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

Merci @fnlctrl pour l'explication :)

@fnlctrl Merci pour l'explication. C'est asynchrone, j'oubliais, quelle honte =D

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

Questions connexes

fergaldoyle picture fergaldoyle  ·  3Commentaires

robertleeplummerjr picture robertleeplummerjr  ·  3Commentaires

aviggngyv picture aviggngyv  ·  3Commentaires

franciscolourenco picture franciscolourenco  ·  3Commentaires

loki0609 picture loki0609  ·  3Commentaires