【问题标题】:What does Ember Data expect in response to deleting a record?Ember Data 对删除记录的响应是什么?
【发布时间】:2013-12-18 02:00:21
【问题描述】:

我正在使用带有 Rails 后端的 RESTful 适配器的 Ember Data。

当我从 Ember record.deleteRecord(); record.save() 删除记录时,DELETE 请求会发送到服务器并删除模型,但此错误会打印到 javascript 控制台:

Extract requested, but no data given for App.ThisModel. This may cause weird problems.

来自服务器的响应只是render json: true,所以我将其更改为render json: deleted_model,它为已删除记录呈现json。

这摆脱了之前的错误,但现在在 Ember 中重新创建了已删除的记录。

Ember 对响应的期望是什么?

【问题讨论】:

    标签: ruby-on-rails ember.js ember-data


    【解决方案1】:

    您应该返回一个带有空的有效 json 响应 {} 的 200,返回的任何数据都将应用于记录,就好像它们是属性一样。

    http://emberjs.jsbin.com/OxIDiVU/215/edit

    此外,您可以发回 204 而没有响应。

    http://emberjs.jsbin.com/OxIDiVU/214/edit

    【讨论】:

    • 你的回答是对的,但我有点好奇,ember 对属性有什么影响?如果删除请求返回 200,则该资源应该已被删除,那么 ember 将如何处理已删除资源的属性?
    • 它会将它们应用于记录,然后将其标记为已删除,有点傻,但是 Ember Data 的 _commit 方法被泛化为处理创建/更新/删除。
    【解决方案2】:

    jQuery 1.9 no longer treats 对 JSON 请求的响应为 200 成功。您的服务器现在应该为具有空响应正文的 DELETE 请求返回 204 响应。

    对于 Rails 服务器,您可以执行以下操作:

    def destroy
      @something.destroy!
      head :no_content
    end
    

    【讨论】:

    • 好点 Sapan,我已经更新了我的答案以反映这一点。
    • 或者更好的render status :no_content, nothing: true,例如JSON API。
    【解决方案3】:

    在 ember 1.5.1 和 ember-data 1.0.0-beta.9+canary.410d62d6 中,我尝试返回一个空的 json 对象/数组,例如 { },就像上面的答案一样。没用。

    它仅适用于 200 响应代码和 null 作为响应值。

    所以也许这已经改变了,或者它也取决于其他事情......我不能说,但只能告诉你什么对我有用。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多