当我在我的模型上调用 .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 开始):
- 你跑
record.save()
. - 记录tells商店安排其保存操作:
store.scheduleSave()
. - 每个运行循环周期一次,存储 flushes预定的保存操作:
store.flushPendingSave()
. - 店铺asks执行保存的记录适配器:
adapter.updateRecord()
. - 适配器asks将记录转换为 JSON 负载的记录序列化程序:
serializer.serializeIntoHash
. - 适配器builds网址:
adapter.buildURL
. - 适配器performs对后端的请求。
- 店铺asks序列化程序将来自服务器的响应转换为数据并将其推送到商店:
serializer.extract()
->serializer.extractSave()
->serializer.extractSingle()
. - 序列化器 runs
serializer.normalizePayload()
它什么都不做,但您可以覆盖它以清理有效负载。 - 序列化器 prepares有效载荷和 pushes生成的负载到商店。
- 店铺runs它的
store.didSaveRecord()
方法。 - 店铺triggers模型上的
didCommit
事件。 - 最后,第 1 项中
record.save()
返回的 promise 得到解决。
此列表中缺少一些步骤,我只突出显示了重要的步骤。我鼓励您遵循源代码中的整个过程,我给了您足够的引用资料。
现在回答你的问题。我建议你覆盖 serializer.extractSave()
方法。在那里,您可以将后端的有效负载转换为 Ember 格式并对其进行调整。不要忘记使用所有参数和修改后的有效负载调用 this.super()
,以便 Ember 实际将其推送到商店!
关于ember.js - 从 ember .save() 方法中检索呈现的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767267/