Backbone.sync澄清

时间:2015-07-14 18:39:08

标签: javascript backbone.js reactjs sync

阅读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,但这是另一个问题。

1 个答案:

答案 0 :(得分:1)

第一次保存模型(没有id的模型)时,它将进行POST,之后它将进行PUT(更新)。我认为您在使用create / add / save时会感到困惑:

  • 在任何时候使用save将当前客户端集合/模型状态保存到服务器
  • 使用add将模型添加到集合(单个模型,模型数组或包含属性的对象数组,让集合创建它们)
  • 使用create作为创建模型的简写,将其添加到集合中,并将集合同步到服务器。

我的猜测是,您在一次操作中呼叫createsave - 您应该使用addsave代替create

视图不会自动为您更新,您需要收听集合/模型上的更改或事件并自行更新视图 - 没有等效的componentDidUpdate。例如:

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

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