我想允许用户更改集合中模型的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'}保存到旧网址。
最一致的做法是什么?
答案 0 :(得分:4)
这是一个很好的例子,没有最佳实践。
我会尝试覆盖Backbone.sync和/或Backbone.Model save以使骨干行为符合这种方式。当直接保存到本地数据库时,我在Air应用程序中使用骨干时做了类似的事情。
- 修改
答案 1 :(得分:3)
这也可以通过在模型的save方法上将wait选项设置为true来实现。 这可以防止模型的URL更改,直到服务器返回具有新id的更新表示。我已经尝试过了,看起来效果很好!
答案 2 :(得分:2)
我认为任何框架,服务器端或客户端都不支持开箱即用。最好的方法是在服务器上对您自己的端点执行您自己的AJAX请求。我会质疑为什么你需要这样做,我想不出任何理由是个好主意。
答案 3 :(得分:0)
它有点迂回,但您可以创建一个单独的唯一ID(使用模型的idAttribute指定),然后'id'只是另一个属性。
大多数(所有......?)框架都假设id是唯一且不变的。
只知道改变id有很多含义。任何引用其他对象的内容现在都将被破坏,引用之前id的url将被破坏等等...