Underscore: _.debounce() kehilangan event.currentTarget

Dibuat pada 23 Okt 2014  ·  8Komentar  ·  Sumber: jashkenas/underscore

Saya tidak bisa mendapatkan event.currentTarget saat menggunakan addEventListener dengan _.debounce() .

Berikut biola .

Komentar yang paling membantu

@jridgewell ada ide bagaimana menyiasatinya dalam React onChange. ketika saya tidak menggunakan debounce saya dapat mengakses acara yang tepat di fungsi onChange saya tetapi ketika saya menggunakan _.debounce saya kehilangan event yang tepat – lihat di bawah

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

Semua 8 komentar

Jika properti diubah pada referensi objek acara yang berada di luar cakupan Garis Bawah. Jika Anda menggunakan lib seperti jQuery yang dapat membantu karena mereka membuat objek acara sintetis yang seharusnya dapat Anda rujuk tanpa masalah.

Saya tidak berpikir Anda akan menyiasatinya. event digunakan kembali saat menyebarkan DOM, dengan currentTarget berubah untuk setiap elemen dengan pendengar. biola

Melewati parameter kedua bisa menyiasatinya. biola

var debounced = _.debounce(fn, 50);
document.querySelector('.debounced-input').addEventListener('keyup', function(event) {
    debounced(event, event.currentTarget);
});

Ya, ini di luar cakupan garis bawah. Pertimbangkan kerangka kerja mikro acara DOM seperti gator

Berikut ini contohnya bekerja dengan jQuery.

Saya masih bisa mendapatkan elemen yang biasanya dimiliki currentTarget dengan this ; Saya baru saja membuka masalah ini untuk memastikan apa yang saya lihat sebenarnya adalah perilaku yang diharapkan.

@jridgewell ada ide bagaimana menyiasatinya dalam React onChange. ketika saya tidak menggunakan debounce saya dapat mengakses acara yang tepat di fungsi onChange saya tetapi ketika saya menggunakan _.debounce saya kehilangan event yang tepat – lihat di bawah

// in my render
<input onChange={ _.debounce(this.updateNote.bind(this), 500) } />
// my change handler
updateNote(event) {
    // undefined on event.target, get lodash event not <input/> event target
    const note = event.target.value
    this.sendNote({ note })
 }

Lihat saran kedua saya.

Ini masalah implementasi. Anda harus mempertahankan acara tersebut. onChange harus memanggil persisten dan KEMUDIAN meneruskan acara persisten ke penangan yang di-debounce:

onChange_persist = (e) =>
{
    e.persist();
    e.onChange_debounced(e);
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

sky0014 picture sky0014  ·  8Komentar

zackschuster picture zackschuster  ·  5Komentar

acl0056 picture acl0056  ·  5Komentar

afranioce picture afranioce  ·  8Komentar

xiaoliwang picture xiaoliwang  ·  3Komentar