ember.js - 从 ember .save() 方法中检索呈现的 json

标签 ember.js ember-data

当我在我的模型上调用 .save() 时,我的 Rails 后端呈现一个 json 响应。当像这样执行 jquery ajax PUT 请求时,我可以检索返回的数据(见下文,数据参数):

$.ajax({
    type : 'PUT',
    url: '/conversations/' + conversation.id + '/assignation',
    dataType: 'json',
    data: newAssignation,
    success: function(data) {
        conversation.get('content').pushObject(data)};       
});

在我的模型上调用 .save() 方法时如何检索呈现的 json?

self.store.find('conversation', conv.id).then(function(conversation){

    conversation.set('status', 'opened');
    conversation.save(); ** This returns json response that I want to retrieve **           

});

最佳答案

当您执行 record.save() 时,会发生以下情况(从 Ember Data 1.0.0-beta-19.1 开始):

  1. 你跑 record.save() .
  2. 记录tells商店安排其保存操作:store.scheduleSave() .
  3. 每个运行循环周期一次,存储 flushes预定的保存操作:store.flushPendingSave() .
  4. 店铺asks执行保存的记录适配器:adapter.updateRecord() .
  5. 适配器asks将记录转换为 JSON 负载的记录序列化程序:serializer.serializeIntoHash .
  6. 适配器builds网址:adapter.buildURL .
  7. 适配器performs对后端的请求。
  8. 店铺asks序列化程序将来自服务器的响应转换为数据并将其推送到商店:serializer.extract() -> serializer.extractSave() -> serializer.extractSingle() .
  9. 序列化器 runs serializer.normalizePayload()它什么都不做,但您可以覆盖它以清理有效负载。
  10. 序列化器 prepares有效载荷和 pushes生成的负载到商店。
  11. 店铺runs它的store.didSaveRecord()方法。
  12. 店铺triggers模型上的 didCommit 事件。
  13. 最后,第 1 项中 record.save() 返回的 promise 得到解决。

此列表中缺少一些步骤,我只突出显示了重要的步骤。我鼓励您遵循源代码中的整个过程,我给了您足够的引用资料。

现在回答你的问题。我建议你覆盖 serializer.extractSave()方法。在那里,您可以将后端的有效负载转换为 Ember 格式并对其进行调整。不要忘记使用所有参数和修改后的有效负载调用 this.super(),以便 Ember 实际将其推送到商店!

关于ember.js - 从 ember .save() 方法中检索呈现的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767267/

相关文章:

ember.js - 使用 Ember.js 的 Hashbang URL

cordova - 我可以使EmberJS链接帮助程序使用touchStart事件而不是click吗?

javascript - Ember.js - 在某些模板中加载额外的 .js 文件

ember.js - 使用 ember 数据 findQuery 的结果作为 ArrayController contentBinding

ember.js - 创建模型ember js的记录数组

ember.js - 如何使用 ember 数据处理服务器响应错误

javascript - Ember.js 服务器端或客户端或两者?

javascript - Ember 数据模型通过查询查找延迟?

ember.js - 如何在 ember-cli 应用程序中设置 api-stub?

ember.js - 如何在另一个 Controller Ember 中绑定(bind)应用程序 Controller 属性