Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理嵌套在RelationalModel中的集合?_Javascript_Backbone.js_Backbone Relational - Fatal编程技术网

Javascript 如何处理嵌套在RelationalModel中的集合?

Javascript 如何处理嵌套在RelationalModel中的集合?,javascript,backbone.js,backbone-relational,Javascript,Backbone.js,Backbone Relational,我用于创建复杂的模型层次结构,代码如下所示: var ModelA = Backbone.Model.extend({ initialize: function () { console.log('model a initialized!') } }); var CollectionA = Backbone.Collection.extend({ model: ModelA }); var ModelB = Backbone.RelationalMod

我用于创建复杂的模型层次结构,代码如下所示:

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":[]}]}
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
    }]
});

如您所见,即使成功创建了ModelB,也不会调用ModelA的initialize。检查类型可以证明集合中的对象不是ModelA。如何修复此问题?

需要两个更改:使ModelA成为RelationalModel,而不仅仅是标准模型,并告诉ModelB ModelA是其RelationalModel,如下所示:

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":[]}]}
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
    }]
});