如何取消设置_id骨干模型属性?

时间:2013-01-31 23:37:09

标签: javascript backbone.js backbone-model

我想unset()来自模型实例的_id属性,使用POST模型方法发出save()请求

但由于这一行,我得到Uncaught TypeError: Object [object Object] has no method 'call' backbone-min.js

myModel.unset('_id');

我正在使用idAttribute: "_id"所以我试过了:

myModel.unset('id');

但它没有取消设置_id属性。

2 个答案:

答案 0 :(得分:2)

使用model.unset('_id')应该可以正常工作。我的猜测是,change事件监听器会在您的代码或某些库代码中抛出该错误。为了不触发事件,您可以使用silent:true选项。

但是,如果您只想强制model.save()方法执行POST,则无需取消设置_id属性。

改为覆盖model.isNew方法。 Backbone使用它来确定模型是新的(应该是POST ed)还是现有的(并且应该是PUT)。重写方法以始终返回true将使您的模型每次都POST

isNew: function() { return true; }

答案 1 :(得分:0)

Backbone将属性存储在模型中名为attributes的对象中。属性_id虽然代表该模型的ID,但不是用于确定模型是否是新模型的。

有一个名为id属性attributes的兄弟),用于进行isNew()判断。

如果您想强制POST,则需要删除id属性:

var id = model.id;
model.unset('_id');
delete model.id;
model.save(); // this will do a POST