阅读docs后,这是我对sync
的理解。
我实例化了一些Backbone.Model
并致电Collection.create()
。 create()
最终调用sync()
,Model
POST
为服务器。然后在相反的方向上有sync
,以便客户端上的Model
获得id
。
此更新是否会触发componentDidUpdate()
?
注意: componentDidUpdate
是一个ReactJS的东西,所以如果这没有意义,问题就会缩小到"客户端模型是否更新,视图是否重新渲染"
由于我componentDidUpdate()
内部正在拨打save()
来保持所有内容的最新状态,因此随后拨打sync()
,然后点击PUT
请求(因为Model
已经有id
)。
我问,因为在我当前的应用程序中,创建一个TodoItem似乎会产生POST
然后PUT
,我发现它是多余的。也许这是出于无关的原因。
实际上,当添加一个项目时,它会触发两个POSTS然后两个PUTS,但这是另一个问题。
答案 0 :(得分:1)
第一次保存模型(没有id的模型)时,它将进行POST,之后它将进行PUT(更新)。我认为您在使用create
/ add
/ save
时会感到困惑:
save
将当前客户端集合/模型状态保存到服务器add
将模型添加到集合(单个模型,模型数组或包含属性的对象数组,让集合创建它们)create
作为创建模型的简写,将其添加到集合中,并将集合同步到服务器。我的猜测是,您在一次操作中呼叫create
和save
- 您应该使用add
和save
代替create
。
视图不会自动为您更新,您需要收听集合/模型上的更改或事件并自行更新视图 - 没有等效的componentDidUpdate
。例如:
initialize: function() {
this.listenTo(this.collection, 'sync', this.onCollectionSync);
},
onCollectionSync: function() {
this.render();
}