【问题标题】:Handling the model-update-server response in Backbone.js在 Backbone.js 中处理模型更新服务器响应
【发布时间】:2011-11-18 18:41:53
【问题描述】:

Backbone.js 模型在之前的页面上本地更新自身及其视图 将数据传递给服务器并检查服务器的响应,所以如果 服务器说“对不起,查理,这不好”页面已经显示了数据 已更改,因此不能正确表示对象的服务器端状态。当服务器返回错误时,在 Backbone.js 端处理此问题的正确/优雅方式是什么?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    如果您直接编辑模型并尝试同步它,并同时在应用程序的其他地方使用它,那么这可能会导致一系列问题。

    在许多情况下,最好克隆模型进行编辑,然后在成功同步后,将克隆的属性应用回原始模型。

    你可以通过简单的调用得到一个克隆模型:

    var clonedModel = originalModel.clone();
    

    然后您可以将属性应用回成功处理程序中,例如

    originalModel.set(clonedModel.attributes)
    

    【讨论】:

    • 感谢@maxl0rd,但是克隆模型似乎也克隆了视图的钩子,所以一旦我更新克隆,所有视图也会更新,让我回到我开始的地方。跨度>
    • 我不知道你说的钩子是什么意思。克隆模型具有与原始模型相同的属性,但没有原始模型的事件绑定。但是,如果您的初始化程序是创建绑定的对象,那么它们将在克隆上再次创建。为避免这种情况,您希望视图仅绑定到原始模型。我希望这是有道理的。
    【解决方案2】:

    如何将成功、错误回调函数传递给更新服务器端状态的语句。可能是这样的......

    this.model.save(
        {}, {
        success: function() {
            /* update the view now */
        },
        error: function() {
            /* handle the error code here */
        }
    });
    

    更上一层楼,您可能会覆盖 Backbone.sync 以全局处理服务器端错误代码。

    【讨论】:

      【解决方案3】:

      使用

      model.save({wait: true});
      

      来源:http://backbonejs.org/#Model-save

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2012-02-13
        • 2012-04-25
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        相关资源
        最近更新 更多