От чтения учебника под названием «Разработка приложений 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}
);
Могу ли я понять это правильно? Или, для некоторого понимания, как это работает? Мне кажется, что я делаю это аналогичным экземпляру ArrayList в Java, который поддерживает объекты Object.
EDIT: Учитывая, что я получил хотя бы один отрицательный голос по этому вопросу, я хотел бы спросить: «Как работает ItemView в Backbone.js?»
Насколько я понял, конкретная коллекция может содержать только массив определенных моделей (например, ваш 'GitHubRepositoryCollection'), а неспецифическая коллекция может содержать что угодно. См. Это из справочной документации: "collection.model: Переопределите это свойство, чтобы указать класс модели, который содержит коллекция. Если задано, вы можете передавать объекты необработанных атрибутов (и массивы) для добавления, создания и сброса, а также атрибуты будут преобразованы в модель соответствующего типа ». – m4lt3