Как бороться с коллекцией, вложенной в RelationalModel?
Я использую Backbone-Relational для создания сложной иерархии моделей, код выглядит так:
var ModelA = Backbone.Model.extend({
initialize: function () {
console.log('model a initialized!')
}
});
var CollectionA = Backbone.Collection.extend({
model: ModelA
});
var ModelB = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
key: 'Collection',
collectionType: CollectionA
}]
});
var data = new ModelB({
name: 'ModelB',
Collection: [{
name: 'ModelA-1'
}, {
name: 'ModelA-2'
}]
});
console.log(data.get('Collection').at(0) instanceof ModelA); // false
console.log(data.get('Collection').at(0) instanceof ModelB); // true
console.log(JSON.stringify(data.toJSON()));
// {"name":"ModelB","Collection":[{"name":"ModelA-1","Collection":[]},{"name":"ModelA-2","Collection":[]}]}
Как видите, хотя ModelB
успешно создан, initialize()
из ModelA
не называется. Проверка типов доказывает, что объекты внутри коллекции не являются ModelA
, Как я могу это исправить?
1 ответ
Решение
Необходимо внести два изменения: сделать ModelA
RelationalModel
(и не только стандартный), и сказать ModelB
тот ModelA
это его relatedModel
, как это:
var ModelA = Backbone.RelationalModel.extend({
initialize: function () {
console.log('model a initialized!')
}
});
...
var ModelB = Backbone.RelationalModel.extend({
relations: [{
type: Backbone.HasMany,
relatedModel: 'ModelA',
key: 'Collection',
collectionType: CollectionA
}]
});