我使用的是这样的骨干关系:
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在深度嵌入文档方面表现得不太好感到越来越沮丧(我使用的是MongoDB)。是的,Todo应用程序很好,但现实世界更复杂!任何指导或教程都将不胜感激。
如果不了解详细信息,很难回答,但是,您确定在浏览器端需要关系模型吗?
Backbone是为宁静的应用程序而设计的。您的API在服务器端是否稳定?
在您的情况下(在没有真正理解您的限制的情况下),我可以想到以下实现。
在服务器中,以下URI API:
[…]/carType/{carType}
[…]/persons/{person}
[…]/cars/{car}
在这个实现中,"car"表示一个实际的物理对象,其中"carType"表示一类car。"car"的主干模型包含"carType"的ID和"person"的ID。还有"carType"one_answers"person"的主干模型。通过这种方式,当您想要关联一个"person"和一个"carType"时,您可以创建一个新的"car"并对服务器进行POST。由于"汽车"是它自己的独立对象(并且有自己的URL),您可以用事务性的方式操作它(我认为,这就是您所要求的)。
我希望它能有所帮助,答案离你真正想做的不远。
最好的保存策略是以原子方式(一步)保存整个内容。否则,您总是会遇到这样的问题:无法在服务器上保存一个对象意味着您将不得不销毁服务器和客户端上的其他对象。
为了支持这一点,Backbone relational对序列化和反序列化嵌套对象提供了极好的支持。