骨干关系模型保存错误

时间:2013-10-20 13:58:16

标签: javascript backbone.js json backbone-relational

当我尝试使用.save()

保存模型时,我收到错误
Converting circular structure to JSON

有趣的是,modelInstance.toJSON()工作得很好。

在backbone.js第1148行处抛出错误 这是:

params.data = JSON.stringify(options.attrs || model.toJSON(options));

以下是我设置模型的方法:

var Clip = Backbone.RelationalModel.extend({
    idAttribute: "mediaItemId",
    defaults: {
        node: {}
    }
});

var clipCollection = Backbone.Collection.extend({
    model: Clip
});

var mainModel = Backbone.RelationalModel.extend({
    url: '/api/v0/videostate',
    relations: [
        {
            type: Backbone.HasMany 
            ,key: 'videoCollection'
            ,relatedModel: Clip
            ,collectionType: clipCollection
            ,includeInJSON: Clip.idAttribute
            ,reverseRelation: {
                key: 'parent',
                includeInJSON: Clip.idAttribute
            }
        }
    ],
});

var modelInstance = new mainModel()

modelInstance.fetch();

加载到模型中的JSON:

enter image description here

2 个答案:

答案 0 :(得分:1)

includeInJSON: Clip.idAttribute

的反向关系更改includeInJSON: Clip.prototype.idAttribute

像这样的东西

{
    type: Backbone.HasMany 
    ,key: 'videoCollection'
    ,relatedModel: Clip
    ,collectionType: clipCollection
    ,includeInJSON: Clip.prototype.idAttribute
    ,reverseRelation: {
       key: 'parent',
       includeInJSON: Clip.prototype.idAttribute
    }
}

答案 1 :(得分:0)

使用上面的代码http://jsfiddle.net/ravikumaranantha/PuLxQ/6/创建了一个JSFiddle,它不会抛出任何错误。

var Clip = Backbone.RelationalModel.extend({
    idAttribute: "mediaItemId",
    defaults: {
        node: {} //could be problem here
    }
});

我只是觉得问题可能(不确定)在默认映射中有一个对象,你应该避免在默认情况下使用对象/数组,它们将在所有实例中共享。如果你可以发布fetch call的响应,那么这应该可以帮助我们进一步调试它。