2

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

Workflow.Views.Wall = Backbone.View.extend({
  tagName:    'div',
  id:         'wall',
  className:  'row-fluid span12',

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

  render: function() {
    this.model.stages.each(this.renderStage);
    return this;
  },

  renderStage: function(model) {
    var stageView = new Workflow.Views.Stage({ model: model });
    //this is DOMWindow
    this.$el.append(stageView.el);
  }
});

つまり、「壁」には多くの「ステージ」があります。私のrenderStage関数でthisは、DOMWindowです。

誰かが私のエラーを見ますか?

4

3 に答える 3

4

renderStageメソッドをビューにバインドする必要がありWorkflow.Views.Wallます...基本的には、適切なthisコンテキストがあります。

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

または、メソッド引数なしで呼び出すこともできます。これにより、すべてのメソッド_.bindAllに自動的にバインドthisされます。

_.bindAll(this);

詳細については、BackboneのbindとbindAllについてを参照してください。_.bindAllのドキュメントも参照してください。

于 2012-04-27T01:49:16.943 に答える
2

あなたの問題は、私が推測するjQueryeach()関数でこれを使用していることです。「これ」とは、もはやビューではなく、ステージを指します。簡単な回避策は、この行をレンダリングメソッドの先頭に追加することです。

var that = this;

そして、each()関数で「that」を使用します。

于 2012-04-26T12:55:39.787 に答える
1

ステージがコレクションである場合、または各メソッドがアンダースコアからのものである場合は、2番目のパラメーターとしてコンテキストを渡す必要があります。

this.model.stages.each(this.renderStage, this);
于 2012-04-26T21:51:36.217 に答える