Vue: Экземпляр $ dispatch не возвращает значение

Созданный на 31 янв. 2016  ·  3Комментарии  ·  Источник: vuejs/vue

Привет, я немного запутался в vm.$dispatch так как я ожидал, что он вернет значения из обратного вызова слушателя для дальнейшей логики, которую нельзя было поместить в обратный вызов _ (imo) _, но оказалось, что это сам пример. Я изучаю Vue и, наверное, что-то пропустил.

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

Как видите, операция предварительного создания не является обязательной.
Спасибо.

Самый полезный комментарий

  1. $ dispatch не имеет возвращаемого значения.
  2. Использование системы событий ($ dispatch, $ emit и т. Д.) Означает, что ваш код будет асинхронным, а это значит, что дальнейшие действия решаются получателем сообщения, поэтому вы не пишете что-то вроде
    SomeAsyncCode === false
  3. В мире javascript мы используем обратные вызовы для обработки асинхронной логики (обещания лучше, но здесь они не применимы), а $dispatch ожидает, что вы передадите несколько аргументов, включая функцию обратного вызова.
  4. Следовательно, это то, что вам действительно нужно:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

а на стороне получателя

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

Все 3 Комментарий

  1. $ dispatch не имеет возвращаемого значения.
  2. Использование системы событий ($ dispatch, $ emit и т. Д.) Означает, что ваш код будет асинхронным, а это значит, что дальнейшие действия решаются получателем сообщения, поэтому вы не пишете что-то вроде
    SomeAsyncCode === false
  3. В мире javascript мы используем обратные вызовы для обработки асинхронной логики (обещания лучше, но здесь они не применимы), а $dispatch ожидает, что вы передадите несколько аргументов, включая функцию обратного вызова.
  4. Следовательно, это то, что вам действительно нужно:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

а на стороне получателя

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

Спасибо @fnlctrl за объяснение :)

@fnlctrl Спасибо за объяснение. Асинхронно, забыл, как неловко = D

Была ли эта страница полезной?
0 / 5 - 0 рейтинги