TypeScript 点击事件处理程序

riq*_*ang 3 typescript jquery-events

在 Javascript 中,以下代码按预期工作:

$("#field").click(eventHandler);

function eventHander() {
  invokeClassMethod();
  // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

我在 Typescript 中尝试了此操作,但收到错误,因为“this”的上下文似乎已更改为不属于我的类的内容。

$("#field").click(this.eventHandler);

eventHandler() {
  this.invokeClassMethod();
  // do other stuff
}
Run Code Online (Sandbox Code Playgroud)

给我一个错误,因为“invokeClassMethod”未定义。

我是 Typescript 的新手,有人可以告诉我出了什么问题以及如何修复它吗?

riq*_*ang 5

好吧,答案很简单,归根结底是因为我不熟悉 Javascript 功能……以下是我如何让它工作的:

$("#field").click(() => this.eventHandler());
Run Code Online (Sandbox Code Playgroud)

使用bind()也可以:

$("#field").click(this.eventHandler.bind(this));
Run Code Online (Sandbox Code Playgroud)

和 jQuery 代理的工作原理:

$("#field").click($.proxy(this.eventHandler, this));
Run Code Online (Sandbox Code Playgroud)