Vue: لن يقوم Instance $ dispatch بإرجاع القيمة

تم إنشاؤها على ٣١ يناير ٢٠١٦  ·  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. إرسال لا قيمة له.
  2. يعني استخدام نظام الحدث (إرسال $ و $ emit وما إلى ذلك) أن الكود الخاص بك سيكون غير متزامن ، مما يعني أن ما سيحدث بعد ذلك يتم تحديده بواسطة مستقبل الرسائل ، لذلك لا تكتب شيئًا مثل
    SomeAsyncCode === false
  3. في عالم جافا سكريبت ، نستخدم عمليات الاسترجاعات للتعامل مع المنطق غير المتزامن (الوعود أفضل لكنها غير قابلة للتطبيق هنا) ، ويتوقع $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. إرسال لا قيمة له.
  2. يعني استخدام نظام الحدث (إرسال $ و $ emit وما إلى ذلك) أن الكود الخاص بك سيكون غير متزامن ، مما يعني أن ما سيحدث بعد ذلك يتم تحديده بواسطة مستقبل الرسائل ، لذلك لا تكتب شيئًا مثل
    SomeAsyncCode === false
  3. في عالم جافا سكريبت ، نستخدم عمليات الاسترجاعات للتعامل مع المنطق غير المتزامن (الوعود أفضل لكنها غير قابلة للتطبيق هنا) ، ويتوقع $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 شكرا لك على

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات