2

我正在使用 mongoLab,模型 id 看起来像这样

"_id": {
  "$oid": "50f9a0f5e4b007f27f766cf3"
},

我正在使用 将idAttribute模型 ID 设置为,_id并且在我尝试更新模型之前一切正常。

因为该_id属性存在于模型中,所以当我尝试插入时出现错误。

我需要_id从我的属性中删除该属性吗?我假设 Backbone 的魔法会适当地清理属性

4

2 回答 2

2

您需要删除该_id属性。

在 MongoLab REST API 中,id 不是数据负载本身的一部分,但并非所有后端都是如此。Backbone 假设 id 应该存在于有效负载中可能比假设它不应该存在更有意义。

话虽如此,没有真正的方法可以让 Backbone 自动从有效负载中清除 id。如果没有猴子补丁/重写太多代码,最好的选择可能是覆盖Model#toJSON,类似于:

Backbone.Model.prototype.toJSON = function (options) {
  var attrs = _.clone(this.attributes);
  // In this case you'd have to pass `includeId: true` to `toJSON` when you
  // actually *want* the _id in the output.
  return options && options.includeId ? attrs : _.omit(attrs, '_id');
};

您还可以进行monkeypatch同步,例如:

var sync = Backbone.sync;
Backbone.sync = function (method, model, options) {
  options || (options = {});
  // if options.attrs is present, Backbone will use it over dumping toJSON
  if (!options.attrs) options.attrs = _.omit(model.attributes, '_id');
  return sync.call(Backbone, method, model, options);
};
于 2013-01-19T02:51:13.847 回答
0

有同样的问题,在 javascript 中 _id 转换为 null .. 必须做类似的事情..

 var myModel = Backbone.Model.extend({
   parse: function(response){
     var response = response.whatever;
     response.id = response.null;
     delete response.null;
     return appointment;
     }
  });

或收藏

systems.forEach(function(system){
    console.log(system);
    system.id = system.null;
    delete system.null;
});
于 2013-04-16T20:25:13.650 回答