【问题标题】:Backbone.sync clarificationBackbone.sync 说明
【发布时间】:2015-07-14 18:39:07
【问题描述】:

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

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

此更新是否会触发 componentDidUpdate()
注意: componentDidUpdate 是 ReactJS 的东西,所以如果这没有意义,那么问题会简化为“客户端是 -侧面模型更新,视图重新渲染?”

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

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

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

【问题讨论】:

    标签: javascript backbone.js reactjs sync


    【解决方案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();
    }
    

    【讨论】:

    • 太棒了!将我的 create 更改为 add 处理了我的双重 POST 和 PUT。现在,我只是想弄清楚为什么在我的 POST 之后,我在一个肯定在服务器上的项目上找不到 PUT 404。
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2011-01-04
    • 2015-04-03
    • 2013-10-19
    相关资源
    最近更新 更多