【问题标题】:Updating a partial backbone model更新部分主干模型
【发布时间】:2013-01-29 10:58:53
【问题描述】:

我知道以前有人问过这个问题,而且我已经让它工作了,但我不确定它是如何/为什么工作的,希望有人可以向我解释一下。

我有一个模型,我一次只更改一个属性。我不想每次都将整个模型发送到服务器,因为不需要就地编辑。

我这样保存模型

更新字段:函数(e){ var value = $('#update').val(); var key = $(e.currentTarget).parent().attr('id'); MyModel.attributes[key] = value; MyModel.save({key: value},{patch: true},{ 成功:函数(){ 警报(“已保存”); }, 错误:函数(){ alert('更新配方有问题'); }}); },

当我查看发送到服务器的有效负载时,整个模型都在发送,但 rails 控制台只显示更新的字段正在更新。我觉得这令人印象深刻,但同时也令人困惑。它如何知道需要更新的内容。

我认为我对此最大的抱怨是 Paperclip 试图保存附件,即使更新中没有保存附件。

我在这里做错了吗? Backbone 如何告诉 Rails 更新哪些属性。 有没有办法真正只发送必要的属性?

另外,由于某种原因,我的成功功能没有被触发。虽然我怀疑这是相关的。

【问题讨论】:

    标签: ruby-on-rails-3 backbone.js model


    【解决方案1】:

    补丁同步发送整个模型,它只将您提供的属性作为第一个参数发送给model.save()

    model.save({foo: 'bar'}, {patch:true}); // -> PATCH /model/id {foo:bar}
    

    我会在这里冒昧地猜测您使用的是旧版本的 Backbone。 PATCH 支持仅在 0.9.9 中添加,在早期版本中,patch:true 参数将被忽略。如果这是正确的,那么您实际上是在向资源发送 PUT 请求。

    当您说控制台仅显示正在更新的更新字段时,我不知道足够的 Rails 来说明这意味着什么,但是由于您在每次字段更改后发送更新,那么 ActiveRecord / 无论您可能是什么 ORM using 可能足够智能,只能复制和更新实际更改的字段——在您的情况下,是您期望的字段,因为所有其他字段都与数据库中已有的字段匹配。

    否则我可能会完全偏离基础,实际上还有其他问题。如果是这种情况,请回复,我将编辑/删除我的答案。

    编辑:另外,您的成功处理程序没有被调用,因为您错误地传递了它。而不是像您在此处那样传递三个参数:

    MyModel.save({key: value},{patch: true},{success:...});
    

    save 方法只需要两个参数,要设置的属性和选项哈希,其中可能定义多个选项,包括patchsuccess

    MyModel.save({key: value},{patch: true, success:...});
    

    【讨论】:

    • 谢谢@fencliff,就是那个。我还必须添加type: 'PUT',因为主干正在发送更新,rails 无法识别。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 2014-05-26
    • 2012-01-16
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2014-09-18
    相关资源
    最近更新 更多