2011-07-15 14 views
0

私はいくつかのオブジェクト指向のjavascriptを作ることができると私は見ていると私は次のコードを持っています。私は今、私は2つのこの変数を持っているので、私は混乱してなったコンストラクタに私のjQueryのイベントハンドラを移動するために行ってきましたコンストラクタにjqueryハンドラを置くことはできますか?

...

は私が間違ってこれに近づいAMまたはそれを動作させるための方法はありますか?

function Dropdown(ddlname) { 
    this.Value = 0; 
    this.Selected = false; 
    this.DDL = ddlname; 
    this.Limited = false; 
    this.SelectLast = function() { 
     $(this.DDL + ' option:last').attr('selected', 'selected'); 
    } 
    $(ddlname).change(function() { 
     var v = $(this).val(); // <== ? 
     if (typeof v == 'number') { 
      this.Value = v; // <== ? 
      this.Selected = true; // <== ? 
     } 
    }); 
    return true; 
}; 
+0

現在のコードでは、同じハンドラ関数をVal.DDLに複数回バインドすることになります... Val.DDLには何がありますか? – Chandu

+0

は、 'ddlname'に変更されました.jsクラスが "ラップする"ドロップダウンのIDです(つまり、試しています)。 –

答えて

3

jqueryイベントハンドラ内から参照できるように、コンストラクタのコンテキストからthisをローカル変数に割り当てる必要があります。次のように私はマイクロソフトからDataJSチームのマルセロ・ルイスから学んだ

function Dropdown(ddlname) { 
    this.Value = 0; 
    this.Selected = false; 
    this.DDL = ddlname; 
    this.Limited = false; 
    var hold = this; 
    this.SelectLast = function() { 
     $(hold.DDL + ' option:last').attr('selected', 'selected'); 
    } 
    $(ddlname).change(function() { 
     var v = $(this).val(); // <== ? 
     if (typeof v == 'number') { 
      hold.Value = v; // <== ? 
      hold.Selected = true; // <== ? 
     } 
    }); 
    return true; 
}; 
+0

この目的のためには、変数に "self"か "that"のどちらかの名前を付けるのがかなり標準的な方法です - 私は使い方をよりよく反映するために "self"を好む。 「保留」とは何を意味するのかは明らかではありません。あなたが何と呼ぶにしても、関数の宣言を最初に置いて、 "this"をjQueryに渡す関数内で使用するために "this"を保存するのではなく、 "this"の代わりに一貫して使用する方が良いと思います。他の)コードで、これらの関数を呼び出すときに "this"を特定のものに設定します。 – nnnnnn

+0

何らかの理由で「それ」が本当に好きではなかった。 "自己"は私が推測しているように動作します – jdc0589

+0

私はそれが他のオブジェクトを参照しているように聞こえるから "それ"が好きではありません。それに気付いてください。しかし、私は "自己"に固執します。 – nnnnnn

0

はい、ドキュメントレディ機能でクラスを呼び出す必要があります。私はそれが悪い習慣だと確信しています。

$をコンストラクタに渡すか、jQuery拡張を作成することを検討してください。

2

1つのトリックがある:これはあなたを助けるでしょう

function Dropdown(ddlname) 
{  
    var that = this; 
    //rest of your code. now there is no confusion of this since you have that :) 
}; 

わからない場合。しかし、ちょうど私が学んだトリック。

+0

私は「それ」ではなく「自己」を好むので、変数名はそれが何を指しているかを反映します。「その」は何か他のことを意味します。 (この文脈では "それ"の使用がよく分かっていますが、おそらくよく知られているフレーズ "this and that"のためです)。 – nnnnnn

関連する問題