Vue: A instância $ dispatch não retornará o valor

Criado em 31 jan. 2016  ·  3Comentários  ·  Fonte: vuejs/vue

Olá, estou um pouco confuso sobre o vm.$dispatch pois esperava que ele retornasse valores do retorno de chamada do ouvinte para lógica adicional que não poderia ser colocada no retorno de chamada _ (imo) _, mas acabou sendo o exemplo ele mesmo. Estou aprendendo Vue e provavelmente perdi algo.

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

Como você pode ver, a operação de pré-criação é opcional.
Obrigada.

Comentários muito úteis

  1. $ dispatch não tem valor de retorno.
  2. Usar o sistema de eventos ($ dispatch, $ emit e assim por diante) significa que seu código será assíncrono, o que significa que o que acontece a seguir é decidido pelo receptor da mensagem, então você não escreve algo como
    SomeAsyncCode === false
  3. No mundo do javascript, usamos callbacks para lidar com a lógica assíncrona (promessas são melhores, mas não se aplicam aqui), e $dispatch espera que você passe vários argumentos, incluindo uma função de callback.
  4. Portanto, é disso que você realmente precisa:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

e do lado do receptor,

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

Todos 3 comentários

  1. $ dispatch não tem valor de retorno.
  2. Usar o sistema de eventos ($ dispatch, $ emit e assim por diante) significa que seu código será assíncrono, o que significa que o que acontece a seguir é decidido pelo receptor da mensagem, então você não escreve algo como
    SomeAsyncCode === false
  3. No mundo do javascript, usamos callbacks para lidar com a lógica assíncrona (promessas são melhores, mas não se aplicam aqui), e $dispatch espera que você passe vários argumentos, incluindo uma função de callback.
  4. Portanto, é disso que você realmente precisa:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

e do lado do receptor,

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

Obrigado @fnlctrl pela explicação :)

@fnlctrl Obrigado pela explicação. É assíncrono, esqueci, que vergonha = D

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

fergaldoyle picture fergaldoyle  ·  3Comentários

WolfgangFellger picture WolfgangFellger  ·  3Comentários

bdedardel picture bdedardel  ·  3Comentários

wufeng87 picture wufeng87  ·  3Comentários

bfis picture bfis  ·  3Comentários