我正在使用mongoLab,模型ID看起来像这样
"_id": {
"$oid": "50f9a0f5e4b007f27f766cf3"
},
我使用idAttribute
将模型ID设置为_id
,一切正常,直到我尝试更新模型。
由于模型中存在_id
属性,因此在尝试插入时出现错误。
我是否需要从属性中删除属性_id
?我假设Backbone的魔力会适当地清理属性
答案 0 :(得分:2)
您需要删除_id
属性。
在MongoLab REST API中,id不是数据有效负载本身的一部分,但并非所有后端都是如此。对于Backbone而言,假设id应该存在于有效载荷中,而不是假设它不应该存在,这可能更有意义。
据说没有真正的漂亮的方法让Backbone自动清除有效负载中的id。没有monkeypatching /重写太多代码的最佳选择可能是覆盖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);
};
答案 1 :(得分:0)
有同样的问题,其中_id在javascript中被翻译为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;
});