2012-03-30 11 views
1

私はここに述べたジョンResig氏の実装クラスを使用しています:http://ejohn.org/blog/simple-javascript-inheritance/ajaxコールバックでJohn Resigのクラスのメンバーにアクセスするにはどうすればよいですか?

今、私は実際にAjaxの方法に供給されるコールバックです機能を、持っています。今、この関数内のクラスメンバーにアクセスするにはどうすればいいですか?

var Person = Class.extend({ 
    init: function(isDancing){ 
    this.dancing = isDancing; 
    }, 
    dance: function(){ 
    return this.dancing; 
    } 
}); 

そして、私はそれが好きで使用します:

--- EDIT ---私は

と仮定

CASEは、ここで私が定義されたクラスがある

var p = new Person(true); 

$.ajax({url: url, success: p.dance}); 

次に、これはオブジェクトpを指さないからです。

CASE II:

私はオブジェクトに私のUIを結合するためのknockoutjs(http://knockoutjs.com)を使用しています。我々が持っていると仮定します。

var AppViewModel = Class.extend({ 
    person: new Person() 
}); 

とhtmlで結合が次のようになります。

<button data-bind="click: person.dance">Dance</button> 

をこの場合には、「この」踊りにAppViewModelのオブジェクトを指し、そしてません人。

私の場合、後者の方が重要です。これはどのように

+0

「ajaxメソッド」とは何ですか? – TJHeuvel

+1

画像を取得するには、コードを入力する必要があります。 –

+0

[私の 'this'はどこですか?オブジェクトメソッドをコールバック関数として使用する](http://stackoverflow.com/questions/1085674/where-is-my-this-using-objects-method-as-a-callback-function) –

答えて

0

var p = new Person(true); 
$.ajax({ 
    url: url, 
    success: p.dance.bind(p) 
}); 

bind()は、最新のブラウザで利用可能ですが、shown on MDNなどの古いブラウザでは優雅なダウングレードを提供することができます。

そして、あなたはこれを書くことができるKnockoutJSのお好みの場合は

<button data-bind="click: person.dance.bind(person)">Dance</button> 

私はKnockoutJSユーザーではないが、私は彼らのドキュメントページ上で非常によく似た例を見てきたので、これはおそらく動作するはずです。

+1

ありがとう、バディ! – nullDev

関連する問題