在循环内部的Backbone.js视图上访问方法

时间:2012-02-09 03:33:30

标签: javascript backbone.js

我正在处理一个ItemListView包含多个ItemView元素的应用。在我的ItemListView中,我使用jQuery .each()方法循环遍历项集合并将它们呈现为列表元素。

除了将li元素实际附加到包含ul之外,我已经准备好了所有部分。关键点是从ItemListView.appendItem循环内部访问.each()方法。我尝试过使用this.appendItemself.appendItem,但在循环this内是itemselfwindow对象。

这就是我现在所拥有的:

ItemListView = Backbone.View.extend({
    el: '#item-rows',
    initialize: function () {
        this.collection = new Items();
        this.render();
    },
    render: function () {
        $.each(this.collection.models, function (i, item) {
            var itemview = new ItemView( { model: item });
            this.appendItem(itemview); // this refers to the item, so appendItem is undefined
        });
    },
    appendItem: function (itemView) {
        $(this.el).append(itemView.render().el);
    }
});

var itemlistview = new ItemListView;

我很确定上下文问题是唯一的问题,因为我已经通过将它们输出到控制台来检查其他部分,它们看起来很好。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

是的,这是一个非常简单的修复方法。你只需要在外部环境中引用this

render: function () {
    var somereftothis = this;
    $.each(this.collection.models, function (i, item) {
        var itemview = new ItemView( { model: item });
        somereftothis.appendItem(itemview); // this refers to the item, so appendItem is undefined
    });
},