ネストされたビューをレンダリングするときに私のthis
コンテキストが失われている問題があります。ここに私のコードです:ビュークラスのこのコンテキストを失う
"壁"には多くの "段階"があります。私のrenderStage関数では、this
がDOMWindowです。
誰かが私のエラーを参照してください?
ネストされたビューをレンダリングするときに私のthis
コンテキストが失われている問題があります。ここに私のコードです:ビュークラスのこのコンテキストを失う
"壁"には多くの "段階"があります。私のrenderStage関数では、this
がDOMWindowです。
誰かが私のエラーを参照してください?
あなたは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のドキュメントも参照してください。
Underscore(1.5.x)の最新バージョンは、パラメータなしのbindAllをサポートしていません。 – sax
あなたが問題にしているのは、jQuery each()関数がこれを使用していると思います。 「これ」とはステージへのものであり、もはやそれを意味するものではありません。
var that = this;
そして使用あなたの各()関数で「こと」: 簡単な回避策は、あなたのレンダリング方法の初めAこの行を追加することです。
はステージがコレクションである場合、またはむしろ、それぞれの方法は、アンダースコアからである、あなたは、2番目のパラメータとしてコンテキストを渡す必要があります。
this.model.stages.each(this.renderStage, this);
'_.bindAll'関数に' renderStage'を置こうとしましたか? '_.bindAll'(this、 'render'、 'renderStage');' –
こんにちは@PaulOliver - うまくいきました。今、「this」は適切に保持されます。しかし、私はそれが働いたかどうかはわかりません。私は、_bindAll関数が、どのイベントでもリストされた関数を呼び出すと思っていました...しかし、私は既にrender()からrenderStage()を呼び出しています。なぜそれが機能するのか説明できますか? – Stu
もう一度@PaulOliver - 私はRTFMに決めました。ありがとう http://documentcloud.github.com/underscore/#bindAll – Stu