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 に答える