UpT*_*eek 4 javascript backbone.js
我想我的观点来表现自己的时候第一次创建它,所以我打电话this.render();的initialize:功能,这样的(一些代码删除):
var MyView = Backbone.View.extend({
el: $("#mydiv"),
initialize: function() {
this.render();
}
...
Run Code Online (Sandbox Code Playgroud)
在render:函数中,我然后循环遍历子集合,并附加每个子元素的渲染视图:
render: function() {
this.model.somecollection.forEach(function(c) {
var view = new ChildView({ model: c });
this.el.append(view.render().el); //*****
});
return this;
},
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是this渲染函数(用星号标记)中的引用被设置为window而不是MyView对象,并且它导致错误.
我假设我正在调用渲染不正确(当前this.render();).我该怎么做才能this保留上下文?
保存this在for循环之外.
var that = this;
Run Code Online (Sandbox Code Playgroud)
this如果使用,不会在循环内运输_.each().
在Javascript中,每当您输入新的函数上下文时,值this都可能已更改.您需要做的就是this在输入函数之前存储值:
render: function() {
var self = this;
this.model.somecollection.forEach(function(c) {
var view = new ChildView({ model: c });
self.el.append(view.render().el); //*****
});
return this;
},
Run Code Online (Sandbox Code Playgroud)