2

this.hide();行にブレークポイントがあります。これはfirebugで適切に検出されますが、hide:function()に渡されることはありません。私は本当に恥ずかしいnoobie構文エラーを作っていると思います。誰かがこの内部電話をかける適切な方法を教えてもらえますか?

ありがとう!

var myDialog = myControl.extend( { 
    //init  

    show : function() {
        if (this.isModal) {
            this.overlay.unbind("click");
        } else {
            this.overlay.click(function(e) {
                this.hide();
            });
        }
    },

    hide : function() {
        this.overlay.hide();
        this.dialog.fadeOut(300);
    }
});
4

2 に答える 2

2

this.overlay.click() ハンドラーで期待されるコンテキストで操作していない可能性が最も高いです。this.hide() にブレークポイントを置き、「this」オブジェクトを調べます。私はそれがあなたが期待していたものではないに違いない!

次のように、その呼び出しの前に「これ」をキャッシュする必要があります。

show : function() {
    var context = this;
    if (this.isModal) {
        this.overlay.unbind("click");
    } else {
        this.overlay.click(function(e) {
            context.hide();
    });
},

Javascript のコンテキスト/スコープは扱いにくい状況です。

于 2012-07-13T21:06:31.583 に答える
2

あなたのthis.hide();行はクリックイベント内にあるため、this実際にはクリックされた要素を参照します。

于 2012-07-13T21:08:13.993 に答える