Ошибка сохранения базовой реляционной модели

Я получаю ошибку, когда пытаюсь сохранить модель с помощью.save()

Converting circular structure to JSON

Самое смешное, что modelInstance.toJSON() работает просто отлично.

Ошибка выдается в строке 1148 backbone.js, которая:

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, загруженный в модель:

2 ответа

Решение

+ Изменить 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
    }
}

Создал JSFiddle с приведенным выше кодом, http://jsfiddle.net/ravikumaranantha/PuLxQ/6/, он не выдает никакой ошибки.

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

Я просто чувствую, что проблема может быть (не уверен) с наличием объекта в карте значений по умолчанию, вы должны избегать использования объектов / массивов в значениях по умолчанию, они будут распределены между всеми экземплярами. Если вы можете опубликовать ответ от получения вызова, это должно помочь нам отладить его дальше.

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