如何将数组传递给骨干中this.collection.create中的Post方法?

时间:2012-12-10 07:12:19

标签: jquery asp.net-mvc backbone.js

我在我的mvc应用程序中使用backbone.js,我有一个场景,我必须将数组传递给Rest API中的Post方法。我试图在我的模型中设置一个数组属性,然后调用this.collection.create(model)。我正在使用这样的模型的属性    

defaults: {
            Address: '',
            City: '',
            State: '',
            Zip: '',
            AddressArray: []
        } 
  
并尝试将Post方法称为     
    e.models[0].set({ 'AddressArray': e.models});
    this.collection.create(e.models[0]);
    
这里e.models [0]是我模型的对象,e.models是一个模型数组。 set属性设置数组地址但是在创建它时会出现此错误。

Uncaught TypeError: Converting circular structure to JSON 

请指导。

1 个答案:

答案 0 :(得分:0)

错误只是意味着您已经创建了一个自引用对象(不能将其序列化为JSON)。也就是说,你已经完成了相同的工作:

var x = {};
x['test'] = x;
JSON.stringify(x); // TypeError: Converting circular structure to JSON

您可以先使用toJSON创建模型的副本,以便对象不会引用自身:

var json = e.models[0].toJSON();
json['AddressArray'] = e.models[0].attributes;
this.collection.create(json);

但这没有多大意义,因为.attributes指的是模型的属性,所以你所做的就是在AddressArray下创建模型的副本,即如果模型是说的话{ prop: "val", prop2: "val2" },然后你最终得到:

{
    prop: "val",
    prop2: "val2",
    AddressArray: {
        prop: "val",
        prop2: "val2",
    }
}

无论哪种方式,您都无法将引用自身的对象转换为JSON;需要序列化,并通过调用Collection.create将模型保存到服务器。