Backbone.js 为什么赢了';我的模特没通过考试吗?

Backbone.js 为什么赢了';我的模特没通过考试吗?,backbone.js,requirejs,Backbone.js,Requirejs,我有这个收藏观点 define([ 'jquery', 'underscore', 'backbone', 'views/project', 'collections/project-collection', 'templates' ], function ($, _, Backbone, ProjectView, ProjectCollection, JST) { 'use strict'; var ProjectListVie

我有这个收藏观点

 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记录到渲染函数内的控制台。我被难住了

我发现你的
渲染有两个问题:一个你知道,一个你不知道

第一个问题就在这里:

projectCollection.each(this.addOne(), this);
this.addOne()
上的括号调用此处的
addOne
方法,而不是将
this.addOne
函数作为回调传递给
每个
。你想要这个:

projectCollection.each(this.addOne, this);
第二个问题是,您必须等待集合的
fetch
返回,然后集合中才会有任何内容。您可以使用回调:

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

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

我认为是这样的。我试着用链子把。然后()取出来,但没用。这完全有效,谢谢。我怀疑它没有正确的上下文,但我真的不理解关于上下文和闭包的所有知识。