打字稿的新手,试图弄清楚为什么这不起作用:
我有以下类定义:
class SliderRange {
updateSliderText(lowId: JQuery, highId: JQuery) {
//do some updates
}
constructor(public uiId: string, lowDisplay: JQuery, highDisplay: JQuery) {
//register the events that tie ui to the set methods here.
this.primaryUi().on("input", function () {
this.updateSliderText(lowDisplay, highDisplay);
});
this.secondaryUi().on("input", function () {
this.updateSliderText(lowDisplay, highDisplay);
});
}
private primaryUi() : JQuery {
return $(`.original#${this.uiId}`);
}
private secondaryUi(): JQuery {
return $(`.ghost#${this.uiId}`);
}
}
正在正确触发事件,但是当它们被触发时,浏览器会抱怨this.updateSliderText不是函数。在浏览器中查看,这不会被Typescript取代,而是引用JQuery对象(primaryUi或secondaryUi)。然而,IntelliSense正确导航到正确的updateSliderText函数,这使我相信它应该编译成正确引用该函数的javascript。
如何在jquery事件处理程序中引用属于该类的函数?
谢谢。
答案 0 :(得分:3)
您呼叫this
的{{1}}上下文错误。
你需要一个箭头功能(它们是出于这个原因而发明的)或者通过绑定它来做旧样式:
this.updateSliderText
cool和TypeScript方法是箭头方法。