Javascript 带有代理的回调方法中的访问对话框
我当前正在用户定义类中创建一个对话框:Javascript 带有代理的回调方法中的访问对话框,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我当前正在用户定义类中创建一个对话框: $("<div>").dialog(buttons: { 'one': function () { $(this).dialog('close').dialog('destroy'); } }); 然后,我可以在单击对话框按钮时调用类方法 但是,我仍然需要对dialog元素本身调用.dialog('close').dialog('destroy')。在使用$.proxy重新定义此之后,如何在按钮回调中访问该元素e.目标
$("<div>").dialog(buttons: {
'one': function () {
$(this).dialog('close').dialog('destroy');
}
});
然后,我可以在单击对话框按钮时调用类方法
但是,我仍然需要对dialog元素本身调用.dialog('close').dialog('destroy')
。在使用$.proxy
重新定义此
之后,如何在按钮回调中访问该元素<代码>e.目标指按钮本身
我也意识到我可以这样做:
var obj = this;
...buttons: {
obj.doWork();
但是我正在寻找一种方法来解决这个问题。我不知道你为什么要避免
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();
});
});
函数MyClass(){
this.createDialog=函数(){
$(“”)。对话框({
按钮:{
“一”:功能(自我){
返回函数(e){
自我工作();
$(此).dialog(“关闭”).dialog(“销毁”);
};
}(本)
}
});
};
this.doWork=函数(){
//工作
};
}
$(函数(){
var obj=新的MyClass();
$(“.createDialog”)。单击(函数(){
obj.createDialog();
});
});
jsIDLE:如果您想访问这两个对象,使用
代理更改上下文$(e.target)有什么好处。最近('.ui dialog buttonpane')。prev()
将为您提供element@ExplosionPills:var obj=此
解决方案是一种常见做法。可能没有更干净的方法来做它。@ExplosionPills,例如'one':函数(self){return function(){…};}(this)
。狭窄的scope@eicto:这是因为您将dlg.dialog\u open作为单击处理程序中的直接引用发送,因此它不会在类的上下文中执行。您需要将其包装在匿名函数中。
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();
});
});