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
将触发的各种事件,有关详细信息,请参阅文档。我认为是这样的。我试着用链子把。然后()取出来,但没用。这完全有效,谢谢。我怀疑它没有正确的上下文,但我真的不理解关于上下文和闭包的所有知识。