1

我正在使用这样的骨干关系:

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 应用程序很不错,但现实世界更复杂!任何指导或教程将不胜感激。

4

2 回答 2

1

不知道细节很难回答,但是,您确定浏览器端需要关系模型吗?

Backbone 专为安静的应用程序而设计。您在服务器端的 API 是否安静?

在你的情况下(并且没有真正理解你所拥有的约束)我可以想到以下实现。

在服务器中使用以下 URI API:

[…]/carType/{carType}
[…]/persons/{person}
[…]/cars/{car}

在这个实现中,“car”代表一个实际的物理对象,其中“carType”代表一类汽车。“car”的主干模型包含“carType”的 ID 和“person”的 ID。还有“carType”和“person”的主干模型。这样,当您想关联“person”和“carType”时,您可以创建一个新的“car”并向服务器发送 POST。由于“汽车”是它自己的独立对象(并且有自己的 URL),因此您可以使用它以事务的方式进行操作(我认为,这就是您要问的)。

我希望它会有所帮助,并且答案与您实际尝试做的事情相去甚远。

于 2012-03-01T10:45:56.833 回答
0

最好的保存策略是原子地保存整个事物(一步)。否则,您总是会遇到这类问题,即未能在服务器上保存一个对象意味着您将不得不销毁服务器和客户端上的其他对象。

为了支持这一点,Backbone-relational 为嵌套对象的序列化和反序列化提供了出色的支持。

于 2012-03-16T14:08:58.667 回答