从ember .save()方法中检索渲染的json

时间:2015-06-10 21:03:53

标签: 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 **           

});

1 个答案:

答案 0 :(得分:4)

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

  1. 您运行record.save()
  2. 商店的记录tells,用于安排其保存操作:store.scheduleSave()
  3. 每个runloop周期,商店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. 商店runsstore.didSaveRecord()方法。
  12. 商店triggers模型上的didCommit事件。
  13. 最后,第1项中record.save()返回的承诺会解决。
  14. 此列表中缺少一些步骤,我只强调了重要的步骤。我鼓励你在资料来源中遵循整个程序,我给了你足够的参考资料。

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