我正在使用Backbone-relational:
class window.Car extends Backbone.RelationalModel
class window.Person extends Backbone.RelationalModel
relations: [{
type: Backbone.HasOne
key: 'car'
relatedModel: Car
}]
还有PersonView
,其中嵌入了子视图CarView
。
现在我的问题是,当用户点击PersonView中的“保存”时,最佳策略是什么?问题是save
将分两步进行,首先是汽车,然后是人。但是如果验证失败了怎么办呢?它会取消保存,但车已经保存了!
也许Backbone-relational不是最好的选择?还有其他选择吗?
更一般地说,我越来越感到沮丧,因为Backbone在深度嵌入式文档中玩得不是很好(我使用的是MongoDB)。是的,Todo应用很不错,但现实世界更复杂!非常感谢任何指导或教程。
答案 0 :(得分:1)
如果不了解细节,很难回答,但是,您确定在浏览器方面需要关系模型吗?
Backbone专为休闲应用而设计。您服务器端的API是否安静?
在你的情况下(并没有真正理解你的约束)我可以想到以下实现。
在服务器中使用以下URI API:
[…]/carType/{carType}
[…]/persons/{person}
[…]/cars/{car}
在该实现中,“car”表示实际物理对象,其中“carType”表示一类汽车。 “car”的主干模型包含“carType”的ID和“person”的ID。还有“carType”和“person”的骨干模型。 通过这种方式,当您想要关联“人”和“carType”时,您将创建一个新的“汽车”并对服务器进行POST。由于“car”是它自己的独立对象(并且有自己的URL),你可以用它以事务方式操作(我认为,这就是你所要求的)。
我希望它有所帮助,答案不是你实际上要做的事情。
答案 1 :(得分:0)
最好的保存策略是以原子方式保存整个事物(一步到位)。否则,如果未能在服务器上保存一个对象,您将始终遇到这类问题,这意味着您将不得不销毁服务器和客户端上的其他对象。
为了支持这一点,Backbone-relational非常支持对嵌套对象进行序列化和反序列化。