Vue: La instancia $ dispatch no devolverá el valor

Creado en 31 ene. 2016  ·  3Comentarios  ·  Fuente: vuejs/vue

Hola, estoy un poco confundido acerca de vm.$dispatch ya que esperaba que devolviera valores de la devolución de llamada del oyente para obtener más lógica que no se pudo colocar en la devolución de llamada _ (imo) _ pero resultó ser el ejemplo de sí mismo. Estoy aprendiendo Vue y probablemente me perdí 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 puede ver, la operación de creación previa es opcional.
Gracias.

Comentario más útil

  1. $ dispatch no tiene valor de devolución.
  2. El uso del sistema de eventos ($ dispatch, $ emit, etc.) significa que su código será asincrónico, lo que significa que lo que sucede a continuación lo decide el receptor del mensaje, por lo que no escribe algo como
    SomeAsyncCode === false
  3. En el mundo de javascript, usamos devoluciones de llamada para manejar la lógica asincrónica (las promesas son mejores pero no es aplicable aquí), y $dispatch espera que pase varios argumentos, incluida una función de devolución de llamada.
  4. Por lo tanto, esto es lo que realmente necesita:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

y del lado del receptor,

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

Todos 3 comentarios

  1. $ dispatch no tiene valor de devolución.
  2. El uso del sistema de eventos ($ dispatch, $ emit, etc.) significa que su código será asincrónico, lo que significa que lo que sucede a continuación lo decide el receptor del mensaje, por lo que no escribe algo como
    SomeAsyncCode === false
  3. En el mundo de javascript, usamos devoluciones de llamada para manejar la lógica asincrónica (las promesas son mejores pero no es aplicable aquí), y $dispatch espera que pase varios argumentos, incluida una función de devolución de llamada.
  4. Por lo tanto, esto es lo que realmente necesita:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

y del lado del receptor,

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

Gracias @fnlctrl por la explicación :)

@fnlctrl Gracias por la explicación. Es asincrónico, lo olvidé, qué vergonzoso = D

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

seemsindie picture seemsindie  ·  3Comentarios

paulpflug picture paulpflug  ·  3Comentarios

guan6 picture guan6  ·  3Comentarios

bdedardel picture bdedardel  ·  3Comentarios

julianxhokaxhiu picture julianxhokaxhiu  ·  3Comentarios