Backbone Model ID未分配给Model,也没有分配给Models的Collection url属性。模型被认为是新的

时间:2014-01-28 00:15:12

标签: javascript django backbone.js frontend

我的骨干模型:

  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的预期输出

如果我正确地将模型添加到集合中,请告诉我。

1 个答案:

答案 0 :(得分:0)

我认为这肯定与您在idAttribute模型中设置的Location属性有关。您id3json_data,但您已将idAttribute设置为_id,因此可能会发生的事情是,因为json_data没有_idundefined,然后将其设置为模型的id,以便模型id变为undefined。现在,由于保存模型idundefined,因此会将其视为新模型并发出POST请求。

来自doc

  

idAttribute model.idAttribute

     

模型的唯一标识符存储在id属性下。如果   你直接与后端(CouchDB,MongoDB)进行通信   使用不同的唯一键, 您可以将模型的idAttribute设置为    透明地从该密钥映射到id

<强> FIX:

您可以删除已设置为idAttribute的{​​{1}}或将_id添加到_id