Backbone.sync 说明
Backbone.sync clarification
看完docs,这是我对sync
的理解。
我实例化一些 Backbone.Model
并调用 Collection.create()
。 create()
最终调用 sync()
并且 Model
被 POST
发送到服务器。然后在相反的方向有一个 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 创建模型,将其添加到集合,并将集合同步到服务器。
我猜你是在一次操作中调用 create
和 save
- 你应该使用 add
和 save
,或者只是 create
.
视图不会自动为您更新,您需要监听 collection/model 上的更改或事件并自行更新视图 - 没有 componentDidUpdate
的等价物。例如:
initialize: function() {
this.listenTo(this.collection, 'sync', this.onCollectionSync);
},
onCollectionSync: function() {
this.render();
}
看完docs,这是我对sync
的理解。
我实例化一些 Backbone.Model
并调用 Collection.create()
。 create()
最终调用 sync()
并且 Model
被 POST
发送到服务器。然后在相反的方向有一个 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 创建模型,将其添加到集合,并将集合同步到服务器。
我猜你是在一次操作中调用 create
和 save
- 你应该使用 add
和 save
,或者只是 create
.
视图不会自动为您更新,您需要监听 collection/model 上的更改或事件并自行更新视图 - 没有 componentDidUpdate
的等价物。例如:
initialize: function() {
this.listenTo(this.collection, 'sync', this.onCollectionSync);
},
onCollectionSync: function() {
this.render();
}