由于ember指南解释了如何在类似的路线上加载多个模型
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
songs: this.get('store').findAll('song'),
albums: this.get('store').findAll('album')
});
}
});
我想知道如何从第二个模型中只加载相关的模型条目,比如加载所有歌曲,但只加载歌曲中索引的专辑,如果我们假设歌曲模型包含这个
...
albums: hasMany('album'),
...
我该怎么做?
假设您的适配器和JSON API后端支持它,您可以简单地说:
export default Ember.Route.extend({
model() {
return Ember.RSVP.hash({
songs: this.get('store').findAll('song', { include: 'albums' }),
});
}
});
通常,这将生成GET
到/songs?include=albums
,根据http://jsonapi.org/format/#fetching-包括。
在Ember方面,该功能在http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html#toc_code-ds finder包含代码。
如果以上不是一个选项,那么如果不构建自定义端点并使用store.pushPayload
,就无法在一个请求中加载所有内容。
以下是的一种方法
export default Ember.Route.extend({
model() {
var promise = new Ember.RSVP.Promise(function(resolve,reject){
this.store.findAll('song').then(function(songs){
var albumPromises = songs.map(fuction(s){return s.get('album')});
Em.RSVP.all(albumPromises).then(function(){
resolve(songs);
});
});
});
return promise;
}
});
所以基本上你是在等待,直到一切都解决了。
希望它能有所帮助!