我有一个遵循JSON API规范的后端。
在我的Ember应用程序中,我做了类似的事情:
model() {
return this.store.query('category', { filter: { forum: 'main' } });
}
这很有效,发送到服务器的请求是GET /categories?filter[forum]=main
。我的应用从ID为main
的论坛中获取所有类别。
现在,我想从模型中创建一个GET /forums/main/categories
,而不是之前的请求。如何用Ember Data在Ember中完成这个?
这是我尝试使用Ember AJAX的东西:
ajax: Ember.inject.service(),
model() {
return Ember.RSVP.hash({
categories: this.get('ajax').request('/forums/main/categories'),
});
}
请求正常,从服务器返回正确的数据。但是Ember Data对此并不了解,我也无法在模板中使用该模型。如何使Ember AJAX与Ember Data一起使用?
Ember AJAX GitHub页面建议编写类似的内容:
import DS from 'ember-data';
import AjaxServiceSupport from 'ember-ajax/mixins/ajax-support';
export default DS.JSONAPIAdapter.extend(AjaxServiceSupport);
https://github.com/ember-cli/ember-ajax#usage-with-ember-data
但它似乎没有改变任何东西。
答案 0 :(得分:1)
好的,/forums/main/categories
看起来有点像关系链接。像forum
一样也是一个模型,并且具有关系类别。这是对的吗?
如果是,可能最好的方法是首先获取forum
然后再获取关系。也许你已经有了forum
记录?所以像这样:
store.findRecord('forum', 'main').then(forum => forum.get('categories'));
但是,如果您想根据论坛字符串过滤categories
,也可以这样做。所以基本上你想要这样做:
this.store.query('category', { filter: { forum: 'main' } });
但它应该请求/forums/main/categories
而不是/categories?filter[forum]=main
。这可以使用自定义适配器完成。可能你只需要覆盖urlForQuery
:
urlForQuery(query, modelName) {
if(query.filter.forum)
const forum = query.filter.forum;
delete query.filter.forum;
return `/forums/${forum}/categories`
} else {
return this._super(...arguments);
}
},