2

我目前正在用户定义的类中创建一个对话框:

$("<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();

但我正在寻找解决方法。

4

1 回答 1

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/

于 2013-01-06T03:34:58.257 回答