Backbone.sync 说明

Backbone.sync clarification

看完docs,这是我对sync的理解。

我实例化一些 Backbone.Model 并调用 Collection.create()create() 最终调用 sync() 并且 ModelPOST 发送到服务器。然后在相反的方向有一个 sync 这样客户端上的 Model 被赋予一个 id.

此更新是否会触发 componentDidUpdate()
注意: componentDidUpdate 是 ReactJS 的东西,所以如果这没有意义,问题会减少到 "Is the client-side model updated and the view re-rendered?"

因为在我的 componentDidUpdate() 内部,我正在调用 save() 以保持所有内容最新,这随后调用 sync() 然后触发 PUT 请求(因为 Model 已经有一个 id)。

我在问,因为在我当前的应用程序中,创建 TodoItem 似乎会导致 POST,然后是 PUT,我觉得这是多余的。也许是出于不相关的原因。

它实际上在添加一项时触发了两个 POSTS,然后触发了两个 PUTS,但这是另一个问题。

第一次保存模型(没有 id 的模型)时,它会生成一个 POST,然后它会生成一个 PUT(更新)。我认为您在何时使用 create/add/save:

时感到困惑
  • 随时使用save将当前客户端collection/model状态保存到服务器
  • 使用add将模型添加到集合(单个模型、模型数组或包含属性并让集合创建它们的对象数组)
  • 使用 create 作为 shorthand 创建模型,将其添加到集合,并将集合同步到服务器。

我猜你是在一次操作中调用 createsave - 你应该使用 addsave,或者只是 create.

视图不会自动为您更新,您需要监听 collection/model 上的更改或事件并自行更新视图 - 没有 componentDidUpdate 的等价物。例如:

initialize: function() {
    this.listenTo(this.collection, 'sync', this.onCollectionSync);
},

onCollectionSync: function() {
    this.render();
}