Ember.js数据冲突解决/冲突失败

时间:2013-03-14 07:09:57

标签: javascript database rest ember.js ember-data

如果将Ember.js与ember-data REST适配器一起使用,是否存在某种冲突解决策略来处理持久化数据到服务器?

至少,对于我的情况,如果可以通知用户,在发生冲突的情况下,失败和回滚就足够了。那么,这需要一些数据/结构吗?模型上的某种“版本”ID,服务器可以检查提交的版本,并确保客户端具有最新数据。 Ember.js中有什么东西可以减少手动操作吗?如果是的话,是什么?

编辑:此外,是否有任何有助于模型批量提交冲突的内容?假设我们有一个与几个子模型具有“hasMany”关系的父模型,并且所有这些模型将同时持久保存到数据库中。如果只是处理服务器端代码,我觉得我可以将它包装在我正在使用的任何数据库中的事务上,如果某些事情已经过时则会失败。这如何转化为Ember.js交易?

我在Adapter类中看到了一个标志bulkCommit。这似乎能够在一个请求中批量提交相同类型的对象。但是,如果我持久保存多个类型的记录,那么这将导致对服务器的多个请求。有没有办法要么a)在向服务器的一个请求中发生这种情况,或者b)将ember-data的事务与服务器上的事务匹配,所以如果服务器上的事务失败,并且需要回滚, ember-data事务也失败了?

[我正在评估Ember.js即将开展的项目,并测试一些功能以及开发的内容。我实际上正在考虑使用socket.io或类似的实时更新。我看到derby.js已经采取了一些自动冲突解决方案]

1 个答案:

答案 0 :(得分:0)

正如您在Ember数据源代码here中所看到的,您可以返回422 HTTP状态代码,并将错误作为字典返回。 Ember数据库按键作为模型的属性将错误添加到模型中,模型本身将被视为无效。一旦每个有错误的属性发生变化,模型将自动离开此状态。

一旦发生并发错误,您就可以在版本属性和reloadRecord上查看错误。