javascript - typescript ile underscore.js "debounce" fonksiyonunu kullanmak
Temel fikir çift tıklamaları önlemektir. Tıklandığında bir fonksiyonu çağırmak için html <button> kullanıyorum, bu da bir ajax çağrısı yapıyor. Yerel <button> davranışı event.preventDefault() ile engelleniyor, bu da hiçbir formun gönderilmeyeceği anlamına geliyor. Ayrıca, TypeScript kullanıyorum:
private form: JQuery;
...
private getTargetAndCallAjax(): void {
var target: string = this.form.find("form").data("target");
this.form.find("button[type='submit']").on("click", (event)=> {
event.preventDefault();
this.callAjax(target);
});
}
private callAjax(target: string): void {
...
}
Ben olarak, _.debounce'i şu şekilde uyguladım:
private form: JQuery;
...
private getTargetAndCallAjax(): void {
var target: string = this.form.find("form").data("target");
this.form.find("button[type='submit']").on("click", (event) => {
event.preventDefault();
var ajaxCall = function () { this.callAjax(target) };
_.debounce(ajaxCall, 1000, true);
});
}
private callAjax(target: string): void {
...
}
Amaç, birden fazla <button> tıklaması tespit edilirse her 1 saniyede bir this.ajaxCall(target) çağrısı yapmaktır. Ne yazık ki, this.ajaxCall(target) fonksiyonu hiç çağrılmıyor. Fikirleriniz var mı?
Cevap #1
Bunun nedeni, ajaxCall içinde yanlış this bağlamına sahip olmanızdır. Düzelt:
var ajaxCall = () => { this.callAjax(target) };
Not: neden: https://www.youtube.com/watch?v=tvocUcbCupA&hd=1
Ayrıca _.debounce çağrılması gereken bir debounce edilmiş fonksiyon döndürür. Yani tam kod:
var debouncedAjaxCall = _.debounce(() => this.callAjax(target), 1000, true);
debouncedAjaxCall();
