【问题标题】:Backbone Relational and subviews, best "save" strategy骨干关系和子视图,最佳“保存”策略
【发布时间】:2012-02-25 13:54:12
【问题描述】:

我正在使用这样的 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 在深度嵌入文档方面表现不佳感到越来越沮丧(我正在使用 MongoDB)。是的,Todo 应用程序很不错,但现实世界更复杂!任何指导或教程将不胜感激。

【问题讨论】:

    标签: backbone.js backbone-relational


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2018-11-05
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        相关资源
        最近更新 更多