我在backbone.js 中的集合有问题,我做错了什么。这是我的模特
var Point = Backbone.Model.extend({
defaults: {
x: 0.0,
y: 0.0,
z: 0.0,
},
validate: function(attrs) {
if(!isNumber(attrs.x) || !isNumber(attrs.y) || !isNumber(attrs.z))
return "Discovered NaN point";
else return null;
},
});
我的收藏:
var TrackCollection = Backbone.Collection.extend({
model: Point,
});
和观点:
var TrackView = Backbone.View.extend({
initialize: function() {
_bind('all', this.render, this);
},
render: function() {
console.log(this.collection.models);
return this
},
});
在我的家庭视图中,我这样做:
var c = new TrackCollection();
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
var v = new TrackView({
collection: c,
});
v.render();
为什么是 console.log(this.collection.models); 在渲染方法中返回一个空数组?相反,如果我将其更改为 console.log(this.collection); 它返回我的集合对象..
编辑这里的主页视图
window.HomeView = Backbone.View.extend({
initialize: function() {
},
events: {
"click #makeIT": "makeIT",
},
render: function() {
$(this.el).html(this.template());
return this;
},
makeIT: function(e) {
var c = new TrackCollection();
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
c.add({ x: 1, y: 1, z: 1});
var v = new TrackView({
collection: c
});
v.render();
}
});
如果我复制 makeIT 内容并将其放在模型和集合所在的同一文件中,则它可以正常工作