我目前正在用户定义的类中创建一个对话框:
$("<div>").dialog(buttons: {
'one': function () {
$(this).dialog('close').dialog('destroy');
}
});
以上工作正常,但this
不再引用上述函数中的类实例。我可以使用$.proxy
来解决这个问题:
...buttons: {
'one': $.proxy(function () {
this.doWork();
}, this)
然后,我可以在单击对话框按钮时调用类方法。
但是,我仍然需要在对话框元素本身上调用.dialog('close').dialog('destroy')
。使用this
重新定义$.proxy
后,如何在按钮回调中访问该元素? e.target
指的是按钮本身。
我也意识到我可以这样做:
var obj = this;
...buttons: {
obj.doWork();
但我正在寻找解决方法。
答案 0 :(得分:0)
我不确定你为什么要在类的范围内避免var obj = this;
,但唯一的另一种方法是使用自动调用的闭包,它实际上是相同的。为了引用这两个上下文,您需要将类引用存储在另一个变量中。
关闭:
function MyClass() {
this.createDialog = function () {
$("<div>").dialog({
buttons: {
"one": function (self) {
return function (e) {
self.doWork();
$(this).dialog("close").dialog("destroy");
};
}(this)
}
});
};
this.doWork = function () {
// do work
};
}
$(function () {
var obj = new MyClass();
$(".createDialog").click(function () {
obj.createDialog();
});
});
jsFiddle:http://jsfiddle.net/ar4ZL/