Vue: インスタンス$ dispatchは値を返しません

作成日 2016年01月31日  ·  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の世界では、コールバックを使用して非同期ロジックを処理し(Promiseの方が優れていますが、ここでは適用できません)、 $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の世界では、コールバックを使用して非同期ロジックを処理し(Promiseの方が優れていますが、ここでは適用できません)、 $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 評価