2012-04-26 3 views
2

ネストされたビューをレンダリングするときに私のthisコンテキストが失われている問題があります。ここに私のコードです:ビュークラスのこのコンテキストを失う

"壁"には多くの "段階"があります。私のrenderStage関数では、thisがDOMWindowです。

誰かが私のエラーを参照してください?

+3

'_.bindAll'関数に' renderStage'を置こうとしましたか? '_.bindAll'(this、 'render'、 'renderStage');' –

+0

こんにちは@PaulOliver - うまくいきました。今、「this」は適切に保持されます。しかし、私はそれが働いたかどうかはわかりません。私は、_bindAll関数が、どのイベントでもリストされた関数を呼び出すと思っていました...しかし、私は既にrender()からrenderStage()を呼び出しています。なぜそれが機能するのか説明できますか? – Stu

+1

もう一度@PaulOliver - 私はRTFMに決めました。ありがとう http://documentcloud.github.com/underscore/#bindAll – Stu

答えて

4

あなたはWorkflow.Views.WallビューにごrenderStage方法をバインドする必要があります。 ..基本的にあなたは適切な文脈を持っています。this

initialize: function() { 
    _.bindAll(this, 'render', 'renderStage'); 
    this.model.view = this; 
} 

また、あなただけ自動的にthisすべてにメソッドをバインドしますなしメソッドの引数、と_.bindAllを呼び出すことができます。futherの読み取りのために

_.bindAll(this); 

Understanding bind and bindAll in Backboneを参照してください。 _.bindAllのドキュメントも参照してください。

+3

Underscore(1.5.x)の最新バージョンは、パラメータなしのbindAllをサポートしていません。 – sax

2

あなたが問題にしているのは、jQuery each()関数がこれを使用していると思います。 「これ」とはステージへのものであり、もはやそれを意味するものではありません。

var that = this; 

そして使用あなたの各()関数で「こと」: 簡単な回避策は、あなたのレンダリング方法の初めAこの行を追加することです。

1

はステージがコレクションである場合、またはむしろ、それぞれの方法は、アンダースコアからである、あなたは、2番目のパラメータとしてコンテキストを渡す必要があります。

this.model.stages.each(this.renderStage, this); 
関連する問題