通过阅读Addy Osmani编写的“开发Backbone.js应用程序”的教科书并尝试一个实例,可以看到Backbone.Collection类的所有元素都可以具有不同类型的元素。扩展Backbone.Collection的类也可以包含不同类型的元素,就像所有元素不必一致。Backbone.js:支持不同类型对象的“Backbone.Collection”类以及该类如何工作
让我告诉你,我用我的例子代码:
var ToDosCollection = new Backbone.Collection();
ToDosCollection.add([
{ title: 'go to Jamaica.', completed: false },
{ task: "aldvjalkdgj", level: 3, timeDue: "6:00 PM Today" }
]);
console.log('Collection size: ' + ToDosCollection.length);
ToDosCollection.reset([
{ slogan: "Curse you, Sephiroth.", population: 5500,},
{ project: "Final Fantasy X" },
{ amount: 500 }
]);
// Above logs 'Collection reset.'
console.log('Collection size: ' + ToDosCollection.length);
alert(JSON.stringify(ToDosCollection.get(0)));
var GitHubRepository = Backbone.Model.extend({
defaults: {
nameOfRepository : "",
owner : "",
members : [],
dateCreated : "",
commits: 0,
additions: 0,
deletions: 0,
},
initialize : function(){
this.on("change", function() {
console.log("CHANGE DETECTED");
});
this.on("change:nameOfRepository", function(){
console.log("The name of the repository has been changed.");
});
this.on("change:owner", function(){
console.log("The owner of the repository has been changed.");
});
this.on("change:members", function(){
console.log("The members this repository belongs to have been changed.");
});
this.on("change:dateCreated", function(){
console.log("The date this repository was created has been changed.");
});
this.on("change:commits", function(){
console.log("The # of commits this repository has have been changed.");
});
this.on("change:additions", function(){
console.log("The # of additions this repository has have been changed.");
});
this.on("change:deletions", function(){
console.log("The # of deletions this repository has have been changed.");
});
}
});
var GitHubRepositoryCollection = Backbone.Collection.extend({
model: GitHubRepository
});
var newCollection = new GitHubRepositoryCollection();
newCollection.add(
{newObject: new GitHubRepository()},
{title: "Rabbits"},
{elementNumber: 5}
);
我是否理解正确吗?或者,对于某些见解,这实际上是如何工作的?对我来说,我觉得我正在类似于Java中支持Object对象的ArrayList实例。
编辑:考虑到我已经得到了至少一个反对这个问题的投票,我想问一下,“Backbone.js中的ItemView如何工作?”
据我了解,一个特定的集合只能包含特定模型的数组(比如'GitHubRepositoryCollection'),而一个非特定的集合可以包含任何东西。请参阅骨干文档:“collection.model: 重写此属性以指定集合包含的模型类。如果已定义,则可以传递原始属性对象(和数组)以添加,创建和重置,并且属性将被转换成适当类型的模型。“ – m4lt3