Underscore: _.debounce() pierde event.currentTarget

Creado en 23 oct. 2014  ·  8Comentarios  ·  Fuente: jashkenas/underscore

No puedo obtener event.currentTarget cuando uso addEventListener con _.debounce() .

Aquí hay un violín .

Comentario más útil

@jridgewell tiene alguna idea de cómo solucionar esto en React onChange. cuando no uso el rebote, puedo acceder al evento adecuado en mi función onChange, pero cuando uso _.debounce , pierdo el event adecuado; consulte a continuación.

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

Todos 8 comentarios

Si la propiedad se cambia en la referencia del objeto de evento que está fuera del alcance de subrayado. Si usa una biblioteca como jQuery, eso puede ayudar, ya que crean un objeto de evento sintético al que debería poder hacer referencia sin problemas.

No creo que vayas a evitar esto. event se reutiliza a medida que se propaga por el DOM, con currentTarget cambiando para cada elemento con un oyente. violín

Pasar un segundo parámetro puede evitar esto. violín

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

Sí, esto está fuera del alcance del guión bajo. Considere un micro marco de eventos DOM como gator

Aquí hay un ejemplo de cómo funciona con jQuery.

Todavía puedo obtener el elemento que normalmente tiene currentTarget con this ; Acabo de abrir este problema para asegurarme de que lo que estoy viendo es realmente el comportamiento esperado.

@jridgewell tiene alguna idea de cómo solucionar esto en React onChange. cuando no uso el rebote, puedo acceder al evento adecuado en mi función onChange, pero cuando uso _.debounce , pierdo el event adecuado; consulte a continuación.

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

Este es un tema de implementación. Necesita persistir el evento. onChange debe llamar a persistir y LUEGO pasar el evento persistente al controlador de rebote:

onChange_persist = (e) =>
{
    e.persist();
    e.onChange_debounced(e);
}
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

xiaoliwang picture xiaoliwang  ·  3Comentarios

dmaicher picture dmaicher  ·  9Comentarios

githublyp picture githublyp  ·  3Comentarios

jdalton picture jdalton  ·  4Comentarios

ksullivan picture ksullivan  ·  9Comentarios