如何告诉骨干网模型不是新的

时间:2012-04-11 16:31:42

标签: javascript backbone.js backbone-model

我有一个对象也保存在服务器中,我正在从该对象创建一个Backbone模型。

但是当我保存模型时,它正在执行PUT请求,这不是我想要的。如何告诉Backbone数据已经在服务器中而不进行提取?

2 个答案:

答案 0 :(得分:19)

Backbone通过checking if an id is set确定模型的新颖性:

  

isNew model.isNew()

     

此模型是否已保存到服务器了?如果模型还没有id,则认为它是新的。

当你保存模特时,

  • 如果是新的,将发出POST请求,
  • 如果是更新(已设置ID),将发送PUT请求

Backbone Sync documentation


正如@JayC在评论中指出的那样:

如果存在ID无法成为id的问题,您可以使用idAttribute来说明“身份”或关键字段。

答案 1 :(得分:-1)

在这里加上我的两分钱,希望它避免了我必须做的一些头发拉动。

直接通过构造函数将模型的id属性设置为false或null将无法解决问题,您必须通过删除实际将其从内存中删除

例如,我只是努力将属性从一种模型类型复制到另一种类型作为新模型:

copy = Trip.clone()
#doesn't unset the id attribute
schedule = new models.Schedule(_.extend(copy.attributes, {id:null, trip_id:id})
#does unset the id attribute
delete schedule.id
schedule.save null, success: =>
  # back from POST vs PUT   
  ...