【问题标题】:What exactly happens when you save a Backbone model?保存 Backbone 模型时究竟会发生什么?
【发布时间】:2012-07-10 14:47:38
【问题描述】:

保存 Backbone 模型时究竟会发生什么?这是我通过阅读文档here 可以拼凑的最好的:

  1. model.save([attributes], [options]) 被调用
  2. “更改”事件被触发(但仅当属性是新的)
  3. 服务器是否收到更改通知?
  4. 一旦服务器返回,就会调用“同步”事件

但我是 Backbone 菜鸟,我相信其他人可以更好地解释。

我只是好奇会发生什么。我也很难理解 Backbone 是如何提出它发送到服务器的 JSON 对象的。我有一个separate problem,其中 JSON 对象不是我想要的,但我不知道如何更改它。

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    Backbone.Model.saveBackbone.sync的详细流程可以参考annotated source code

    如果您忽略options.waitoptions.silent,您的分解大部分是正确的。

    当你发出model.save:

    1. 传递给函数的属性已设置,如果值发生更改,则会触发更改事件
    2. save 将请求委托给 model.syncBackbone.sync
    3. sync 通过调用 JSON.stringify(model.toJSON()) 将数据序列化为 JSON 字符串
    4. 一个 Ajax 请求被发送到服务器,一个新对象的 POST 请求,一个更新的 PUT 请求。目标网址由model.url(或collection.url/id)定义
    5. 请求完成后,模型会使用服务器响应(如果有)进行更新,并相应地触发 change 事件。
    6. 调用成功或错误回调,如果未定义成功回调,则触发sync 事件。

    通常,您可以通过覆盖 model.toJSONmodel.sync 来自定义此行为

    【讨论】:

    • 在 Backbone 0.9.9 中更改了第六步。请参阅 backbonejs.org/#changelog Backbone.sync 中合并的“同步”和“错误”事件。现在无论是否存在成功或错误回调都会触发它们。
    【解决方案2】:

    首先,建议你阅读backbone的源码,真的很简单。默认backbone和服务器端的交互是通过backbone.sync来实现的。

    第二,你可以再次跟踪代码的debug model.save方法,自然知道细节。 我建议你从这里开始: http://backbonejs.org/examples/todos/index.html

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 2015-10-23
      • 2011-01-18
      • 2014-08-20
      • 2023-04-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多