Vue: Instance $dispatch tidak akan mengembalikan nilainya

Dibuat pada 31 Jan 2016  ·  3Komentar  ·  Sumber: vuejs/vue

Hai, saya agak bingung tentang vm.$dispatch karena saya mengharapkannya mengembalikan nilai dari panggilan balik pendengar untuk logika lebih lanjut yang tidak dapat ditempatkan di panggilan balik _(imo)_ tetapi ternyata itu adalah contoh itu sendiri. Saya sedang belajar Vue dan mungkin melewatkan sesuatu.

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

Seperti yang Anda lihat, operasi pra-buat adalah opsional.
Terima kasih.

Komentar yang paling membantu

  1. $dispatch tidak memiliki nilai kembalian.
  2. Menggunakan sistem acara ($dispatch, $emit, dan seterusnya) berarti kode Anda akan asinkron, yang berarti apa yang terjadi selanjutnya ditentukan oleh penerima pesan, jadi Anda tidak menulis sesuatu seperti
    SomeAsyncCode === false
  3. Di dunia javascript, kami menggunakan panggilan balik untuk menangani logika asinkron (Janji lebih baik tetapi tidak berlaku di sini), dan $dispatch mengharapkan Anda untuk memberikan beberapa argumen termasuk fungsi panggilan balik.
  4. Karena itu, inilah yang sebenarnya Anda butuhkan:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

dan di sisi penerima,

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

Semua 3 komentar

  1. $dispatch tidak memiliki nilai kembalian.
  2. Menggunakan sistem acara ($dispatch, $emit, dan seterusnya) berarti kode Anda akan asinkron, yang berarti apa yang terjadi selanjutnya ditentukan oleh penerima pesan, jadi Anda tidak menulis sesuatu seperti
    SomeAsyncCode === false
  3. Di dunia javascript, kami menggunakan panggilan balik untuk menangani logika asinkron (Janji lebih baik tetapi tidak berlaku di sini), dan $dispatch mengharapkan Anda untuk memberikan beberapa argumen termasuk fungsi panggilan balik.
  4. Karena itu, inilah yang sebenarnya Anda butuhkan:
this.$dispatch('object:creating', args, function() {
    // The business logic
    this.performWhatever(args);
})

dan di sisi penerima,

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

Terima kasih @fnlctrl atas penjelasannya :)

@fnlctrl Terima kasih atas penjelasannya. Ini asinkron, saya lupa, betapa memalukan =D

Apakah halaman ini membantu?
0 / 5 - 0 peringkat