Underscore: _.debounce () يفقد event.currentTarget

تم إنشاؤها على ٢٣ أكتوبر ٢٠١٤  ·  8تعليقات  ·  مصدر: jashkenas/underscore

لا يمكنني الحصول على event.currentTarget عند استخدام addEventListener مع _.debounce() .

هذا كمان .

التعليق الأكثر فائدة

jridgewell أي فكرة عن كيفية الالتفاف على هذا في رد فعل عند التغيير. عندما لا أستخدم debounce ، أتمكن من الوصول إلى الحدث المناسب في وظيفة onChange الخاصة بي ، لكن عندما أستخدم _.debounce أفقد event المناسب - انظر أدناه

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

ال 8 كومينتر

إذا تم تغيير الخاصية في مرجع كائن الحدث الذي يقع خارج نطاق الشرطة السفلية. إذا كنت تستخدم lib مثل jQuery ، فقد يساعد ذلك في إنشاء كائن حدث اصطناعي يجب أن تكون قادرًا على الرجوع إليه دون مشكلة.

لا أعتقد أنك ستلتف حول هذا. يتم إعادة استخدام event أثناء انتشاره في DOM ، مع تغيير currentTarget لكل عنصر مع مستمع. كمان

تمرير المعلمة الثانية يمكن أن يتغلب على هذا. كمان

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

نعم ، هذا خارج نطاق الشرطة السفلية. ضع في اعتبارك إطار عمل مصغر لحدث DOM مثل gator

فيما يلي مثال على ذلك العمل مع jQuery.

لا يزال بإمكاني الحصول على العنصر الذي يمتلكه currentTarget عادةً بـ this ؛ لقد فتحت هذه المشكلة للتو للتأكد من أن ما أراه هو سلوك متوقع بالفعل.

jridgewell أي فكرة عن كيفية الالتفاف على هذا في رد فعل عند التغيير. عندما لا أستخدم debounce ، أتمكن من الوصول إلى الحدث المناسب في وظيفة onChange الخاصة بي ، لكن عندما أستخدم _.debounce أفقد event المناسب - انظر أدناه

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

انظر اقتراحي الثاني .

هذه مسألة تنفيذ. تحتاج إلى الاستمرار في الحدث. يجب أن يقوم onChange باستدعاء persist ثم تمرير الحدث المستمر إلى المعالج debuted:

onChange_persist = (e) =>
{
    e.persist();
    e.onChange_debounced(e);
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات