渲染嵌套视图时,我的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。
有人看到我的错误吗?
答案 0 :(得分:4)
您需要将renderStage
方法绑定到Workflow.Views.Wall
视图...基本上这样才能拥有正确的this
上下文。
initialize: function() {
_.bindAll(this, 'render', 'renderStage');
this.model.view = this;
}
或者,您可以在没有方法参数的情况下调用_.bindAll
,这会自动将this
绑定到所有方法:
_.bindAll(this);
如需进一步阅读,请参阅Understanding bind and bindAll in Backbone。另请参阅_.bindAll的文档。
答案 1 :(得分:2)
你的问题是你在我猜的jQuery each()函数中使用它。 “这个”指的是舞台而不是视图。 一个简单的解决方法是将此行添加到渲染方法的开头:
var that = this;
然后在你的each()函数中使用“that”。
答案 2 :(得分:1)
如果阶段是集合,或者更确切地说,每个方法都来自下划线,则需要将上下文作为第二个参数传递:
this.model.stages.each(this.renderStage, this);