Backbone.js:从视图的Initialize:函数调用render()

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保留上下文?

Zei*_*ssS 6

保存this在for循环之外.

var that = this;
Run Code Online (Sandbox Code Playgroud)

this如果使用,不会在循环内运输_.each().

  • `Backbone.Collection.each()`为上下文提取第三个参数. (4认同)

Sky*_*son 5

在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)