1

我有这个集合视图

 define([
     'jquery',
     'underscore',
     'backbone',
     'views/project',
     'collections/project-collection',
     'templates'
 ], function ($, _, Backbone, ProjectView, ProjectCollection, JST) {
'use strict';

var ProjectListView = Backbone.View.extend({
    template: JST['app/scripts/templates/projectList.ejs'],
    el: $('#content'),

    render: function() {
        var projectCollection = new ProjectCollection();
        projectCollection.fetch();
        projectCollection.each(this.addOne(),this);
        return this;
    },
    addOne: function(project) {
        console.log('addOne function');
        var projectView = new ProjectView({model: project});
        this.$el.html( projectView.render().el);
    }
});

     return ProjectListView;
});

无论我尝试什么,模型都不会传递给 addOne 函数,因此在此方法实例化的视图中,调用

  this.model.toJSON() 

导致旧的“无法调用未定义的方法 .toJSON”错误。当这个集合视图被实例化时,我试图注入集合,但这也不起作用。显然,它在依赖数组中,也不起作用。该模型肯定存在,因为我可以将 projectCollection.model 记录到渲染函数内的控制台。我难住了。

4

1 回答 1

0

我看到你的两个问题render:一个你知道,一个你不知道。

第一个问题就在这里:

projectCollection.each(this.addOne(), this);

括号就this.addOne()在那里调用addOne方法,而不是将this.addOne函数each作为回调传递给。你要这个:

projectCollection.each(this.addOne, this);

第二个问题是您必须等待集合fetch返回,然后集合中才会有任何内容。您可以使用fetch回调:

var _this = this;
projectCollection.fetch({
    success: function() {
        projectCollection.each(_this.addOne, _this);
    }
});

或者您可以使用fetch将触发的各种事件,有关详细信息,请参阅fetch文档。

于 2013-05-27T04:21:39.073 回答