Ember.js/Ember-Data:使用RESTAdapter从多个端点加载数据
Ember.js/Ember-Data: Using the RESTAdapter to load data from multiple endpoints
我有一个API,每次返回一个资源。
作为一个例子,假设我有两个相关的资源:
-
Topics
-
Posts
Topics
hasMany Posts
, and Posts
belongsTo a Topic
.
根据文档(以及我尝试过并一直在阅读的所有内容),Ember-Data期望API的JSON类似于以下内容,其中Topic
的数据和Posts
的数据同时提供。
"topic": {
"id": ...,
"title": ...,
"author": ...
},
"posts": [{
"id": ...,
"commenter": ...,
"text": ...
}, {
"id": ...,
"commenter": ...,
"text": ...
}]
正如我在文章开头提到的,我的API不能做到这一点。它将在一次调用中返回Topic
数据,并在第二次调用中返回Topic
的Posts
数据。改变我的API的工作方式烬希望它不是一个选项。
我的问题是,我如何在Ember-Data中扩展/覆盖RESTAdapter和RESTSerializer来支持从多个API调用加载数据?这可能吗?
我试着遵循这个例子,但看起来这里的数据已经加载(它试图侧载系统已经知道的数据):http://mozmonkey.com/2013/12/loading-json-with-embedded-records-into-ember-data-1-0-0-beta/
我还试图覆盖ApplicationSerializer
的extractFindAll
函数,但无法弄清楚如何让应用程序的其余部分(没有双关语)等待所有关系加载。我遍历模型上的所有关系,并加载它们的数据,但是我没有看到将数据传送回原始有效负载的方法:
extractFindAll: function (store, type, payload, id, requestType) {
var promises = [];
type.eachRelationship(function (key, relationship) {
promise.push(Ember.RSVP.Promise(function (resolve, reject) {
this.store.find(key, payloadEntry[key]);
}));
});
// can't figure out how to get the relationship payloads
// back to the original payload
Ember.RSVP.addSettled(promises).then(function () {
return this._super(store, type, payload, id, requestType);
});
}
这就是async
属性的用法。
App.Foo = DS.Model.extend({
bars: DS.hasMany('bar', {async: true});
})
App.Bar = DS.Model.extend({
baz: DS.attr()
})
<<h2>适配器/h2>App.FooAdapter = DS.RESTAdapter.extend({
//anything custom
});
App.BarAdapter = DS.RESTAdapter.extend({
//anything custom
});
- 如果你不做任何自定义,你应该定义
App.ApplicationAdapter = DS.RESTAdapter;
为一个站点范围的适配器。
序列化器
App.FooSerializer = DS.RESTSerializer.extend({
//anything custom
});
App.BarSerializer = DS.RESTSerializer.extend({
//anything custom
});
- 如果你不做任何自定义,你不需要定义其他序列化器,它们将使用与它们使用的适配器相关联的默认序列化器。
重要的是要注意,我很懒,我对bars的模拟响应总是返回相同的东西,无论对/bar*
的任何调用
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 使用javascript在Flash中加载外部图像
- 谷歌应用引擎云端点:OAuth2不工作.不能加载api
- Ember.js/Ember-Data:使用RESTAdapter从多个端点加载数据
- 加载Google Javascript客户端库和自定义端点客户端库的正确方法是什么?