Как бороться с коллекцией, вложенной в 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
    }]
});

Демо

Другие вопросы по тегам