javascript - 保存 Backbone 模型时究竟发生了什么?

标签 javascript backbone.js

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

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

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

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

最佳答案

详细过程可以引用annotated source code对于 Backbone.Model.saveBackbone.sync .

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

当您发出 model.save 时:

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

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

关于javascript - 保存 Backbone 模型时究竟发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11415946/

相关文章:

Backbone.js 查看事件禁用启用

.remove() 上的 Backbone.js 触发事件

ajax - 如何在 Backbone 的 model.save 错误回调中获取错误响应?

javascript - 在 Backbone Js 中处理模型事件

javascript - 如何限制使用 Angular.js/JavaScript 选中的复选框

javascript - 使用 vanilla Javascript ES6 的链延迟函数

javascript - 使用javascript更新div的内容

javascript - 如何链接多个 fetch() promise ?

javascript - 如何使用 web api2 Controller 使用 firebase token 身份验证

jquery - Backbone 模型 CORS 获取未发送