Vue: .once tidak cocok dengan .self

Dibuat pada 2 Feb 2017  ·  6Komentar  ·  Sumber: vuejs/vue

Pertimbangkan elemen berikut:

<div @click.self.once="eat">Eat <span>me</span></div>

Jika kita mengklik kata "Makan", semuanya bekerja seperti yang diharapkan. Acara ini dipecat sekali dan kami senang.

Tetapi jika kita mengklik "saya", yang merupakan simpul anak, dan kemudian kita mengklik "Makan", acara tersebut tidak akan pernah dijalankan! Sepertinya .once terlalu mudah untuk menilai acara yang dipecat.

Saya pikir .once harus menandainya sebagai selesai hanya jika sebenarnya telah dipecat.

bug

Semua 6 komentar

Terima kasih telah mengajukan masalah ini. Harap ikuti Panduan Pelaporan Masalah dan berikan JSFiddle atau JSBin minimal yang berisi serangkaian langkah yang dapat direproduksi yang dapat mengarah pada perilaku yang Anda jelaskan.

Mengapa ini diperlukan?

Hai,

Saya bukan OP tapi saya pikir saya berhasil mereproduksi masalah yang dia maksud. Saya melampirkan JSFiddle di bawah untuk ilustrasi.

JSFiddle

  1. Mengklik pada kata 'Makan' berfungsi seperti yang diharapkan: acara dipicu dan data buah diperbarui.

  2. Jika kita memuat ulang JSFiddle dan mengklik elemen anak span 'me', lalu pada 'Eat', data buah tidak diperbarui.

Semoga ini membantu.

@boristhuy Terima kasih telah menyediakan JSFiddle. Inilah yang saya maksud.

Ini pasti bug. Saat ini pegangan acara akan dihapus setelah masuk, sebenarnya tidak dipanggil karena pemeriksaan pengubah.

Mungkin kita perlu memperbarui kode once untuk mendukungnya.

Suka

(function(){
  var called = false;
  return function($events){
    // modifiers check
    // called check
    if (called)return;
    called = true;
    // handler code
  }
})()

Adapun once digunakan dalam fungsi render, itu akan membawa perubahan yang merusak. Saya mencoba mencari cara untuk memperbaiki masalah ini.

  1. [wip] perbarui once genCode untuk template.
  2. [selesai] untuk once digunakan dalam fungsi render on: {'~click': handle} , pertahankan strategi lama.
  3. [selesai] ada bug di updateListeners untuk kasus di bawah ini:
    lama: '~click': handle
    baru: 'click': handle2

@defcc Saya memperbaikinya dengan mengembalikan nilai khusus dari penangan yang dicegah dari eksekusi. Ini mungkin tidak mengatasi bug (3) yang Anda sebutkan, tapi mari kita tangani dalam PR terpisah jika perlu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

robertleeplummerjr picture robertleeplummerjr  ·  3Komentar

lmnsg picture lmnsg  ·  3Komentar

franciscolourenco picture franciscolourenco  ·  3Komentar

gkiely picture gkiely  ·  3Komentar

paulpflug picture paulpflug  ·  3Komentar