我的骨干模型:
var Location = Backbone.Model.extend({
idAttribute: "_id",
// Default attributes ensure that each todo created has `title` and `completed` keys.
defaults: {
nick_name: null, //Example: The Office
street_address: '214 West 29th Street',
extended_address: null, // Example: Suite 205
cross_street: null,
locality: 'New York',
region: 'NY',
postal_code: 10001,
country: 'United States',
},
initialize: function() {
}
});
我的骨干系列:
var LocationCollection = Backbone.Collection.extend({
// Reference to this collection's model.
model: Location
});
我有一个全局变量,它是模型的JSON数组:
json_data = [{country: "United States of America",
cross_street: "",
extended_address: "",
id: 3,
locality: "Brooklyn",
nick_name: "",
postal_code: 11208,
region: "NY",
street_address: "3039 Fulton street"}]
当我尝试将模型属性数组添加到Collection时,模型始终被视为新模型,而不是保存到数据库中。因此,我尝试在任何模型上调用save,我得到POST请求而不是PUT请求。此外,我尝试使用模型集方法创建没有集合的模型,并且id属性永远不会设置为模型ID,即使我可以调用model_instance.attributes方法并且我看到id是其中的一部分输出。
this.locationCollection = new LocationCollection();
this.locationCollection.url = urlRoot;
this.locationCollection.add(json_data);
this.locationCollection.each(function(model, index, option) {
console.log(model.id);
console.log(model.urlRoot)
console.log(model.url)
console.log(model.attributes);
}, this)
控制台记录的输出:
undefined
undefined
网址的一些功能
{国家:“美利坚合众国”,
十字路口: ””,
extended_address:“”,
id:3,
地点:“布鲁克林”,
nick_name:“”,
postal_code:11208,
地区:“纽约”,
street_address:“3039 Fulton street”} //更正model.attributes的预期输出
如果我正确地将模型添加到集合中,请告诉我。
答案 0 :(得分:0)
我认为这肯定与您在idAttribute
模型中设置的Location
属性有关。您id
中3
为json_data
,但您已将idAttribute
设置为_id
,因此可能会发生的事情是,因为json_data
没有_id
为undefined
,然后将其设置为模型的id
,以便模型id
变为undefined
。现在,由于保存模型id
为undefined
,因此会将其视为新模型并发出POST
请求。
来自doc:
idAttribute model.idAttribute
模型的唯一标识符存储在id属性下。如果 你直接与后端(CouchDB,MongoDB)进行通信 使用不同的唯一键, 您可以将模型的idAttribute设置为 透明地从该密钥映射到id 。
<强> FIX:强>
您可以删除已设置为idAttribute
的{{1}}或将_id
添加到_id
。