Ember.js REST适配器期望JSON返回为:
{ "person": { "first_name": "Barack", "last_name": "Obama", "is_person_of_the_year": true } }
但是我的API返回的数据 没有根元素 :
{ "first_name": "Barack", "last_name": "Obama", "is_person_of_the_year": true }
是否可以自定义REST适配器,使其接受我的JSON数据?现在,它显示“ 断言失败:您的服务器返回了一个带有键0的哈希,但是您没有映射 ”
更新: 根据下面的Sherwin Yu的答案,这是我想出的,到目前为止似乎仍然有效:https : //gist.github.com/richardkall/5910875
是的,您可以编写自己的自定义REST适配器。看一下JSONSerializer,RESTSerializer(扩展了JSONSerializer)和REST适配器中的源代码。
基本上,您需要重写extract*JSONSerializer中的 方法。
extract*
当前,它看起来像这样:
extract: function(loader, json, type, record) { var root = this.rootForType(type); this.sideload(loader, type, json, root); this.extractMeta(loader, type, json); if (json[root]) { if (record) { loader.updateId(record, json[root]); } this.extractRecordRepresentation(loader, type, json[root]); } },
注意它如何检查json[root]-您必须根据预期的API响应编写自定义方法。
json[root]
另一种方法是“预处理” API中的json以使用根元素。您可以通过找出要调用的方法extract*(将json传递给它)来做到这一点,然后再修改json以包含根元素。
希望这会有所帮助,如果不清楚,请告诉我。