我有一个jQuery ui小部件,其内容中有一个链接
<a href="test" data-foo="clickThis">Click me</a>
在_create
函数中我附加了click事件处理程序并创建了实例变量
_create: function () {
//*this* here refers to widget
this.$elem.on('click', 'a[data-foo]', this._clickHandler);
this.instanceVariable = "someValue";
}
_clickHandler: function (event) {
//**this** in here refers to link, not to widget
//Question: How to call _otherPrivateFunction from here
}
_otherPrivateFunction(){
//I want to access this.instanceVariable in here
}
我在一个页面上有多个widget实例,因此每个实例都应该访问它自己的instanceVariable。
我发现这样做的一种方法是将this
作为event.data
传递给点击处理程序,但是我不喜欢这个解决方案,因为这只是一些解决方法。
this.$elem.on('click', 'a[data-foo]', this, this._clickHandler);
我希望得到一些更好的解决方案。
答案 0 :(得分:4)
您可以使用$.proxy()将自定义执行上下文传递给单击处理程序,然后事件处理程序中的this
将指向窗口小部件,以便您可以从处理程序方法中调用this._otherPrivateFunction()
this.$elem.on('click', 'a[data-foo]', $.proxy(this._clickHandler, this));