Backbone.js:将更改的模型ID保存到服务器的最佳方法

时间:2011-07-02 11:22:38

标签: javascript rest backbone.js

我想允许用户更改集合中模型的id

然后我遇到的问题是,当我呼叫model.save()时,模型被保存到错误的位置。对于新ID的网址,它是put,而不是旧ID的网址

var model = collection.get('oldid');
model.set({id: 'newId'}); // set by the user through the ui
model.save();

这将保存为collectionUrl/ + 'newId'而不是collectionUrl/ + 'oldId'

我想将{put:'id:'newId'}保存到旧网址。

最一致的做法是什么?

4 个答案:

答案 0 :(得分:4)

这是一个很好的例子,没有最佳实践。

我会尝试覆盖Backbone.sync和/或Backbone.Model save以使骨干行为符合这种方式。当直接保存到本地数据库时,我在Air应用程序中使用骨干时做了类似的事情。

- 修改

或者Backbone.Model url

答案 1 :(得分:3)

这也可以通过在模型的save方法上将wait选项设置为true来实现。 这可以防止模型的URL更改,直到服务器返回具有新id的更新表示。我已经尝试过了,看起来效果很好!

答案 2 :(得分:2)

我认为任何框架,服务器端或客户端都不支持开箱即用。最好的方法是在服务器上对您自己的端点执行您自己的AJAX请求。我会质疑为什么你需要这样做,我想不出任何理由是个好主意。

答案 3 :(得分:0)

它有点迂回,但您可以创建一个单独的唯一ID(使用模型的idAttribute指定),然后'id'只是另一个属性。

大多数(所有......?)框架都假设id是唯一且不变的。

只知道改变id有很多含义。任何引用其他对象的内容现在都将被破坏,引用之前id的url将被破坏等等...