我正在使用 mongoLab,模型 id 看起来像这样
"_id": {
"$oid": "50f9a0f5e4b007f27f766cf3"
},
我正在使用 将idAttribute
模型 ID 设置为,_id
并且在我尝试更新模型之前一切正常。
因为该_id
属性存在于模型中,所以当我尝试插入时出现错误。
我需要_id
从我的属性中删除该属性吗?我假设 Backbone 的魔法会适当地清理属性
我正在使用 mongoLab,模型 id 看起来像这样
"_id": {
"$oid": "50f9a0f5e4b007f27f766cf3"
},
我正在使用 将idAttribute
模型 ID 设置为,_id
并且在我尝试更新模型之前一切正常。
因为该_id
属性存在于模型中,所以当我尝试插入时出现错误。
我需要_id
从我的属性中删除该属性吗?我假设 Backbone 的魔法会适当地清理属性
您需要删除该_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);
};
有同样的问题,在 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;
});