Backbone关系和子视图,最好的“保存”策略

时间:2012-02-25 13:54:12

标签: backbone.js backbone-relational

我正在使用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应用很不错,但现实世界更复杂!非常感谢任何指导或教程。

2 个答案:

答案 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非常支持对嵌套对象进行序列化和反序列化。

相关问题