我在路线中有以下代码:
model(params) {
return this.store.findRecord('user', params.id)
}
如何预期,它要求:
/用户/ {somethingId}
但我在外部api中的路由是嵌套的,它看起来像:
/伙伴/ {somethingId} /用户
因此,我需要提出一些请求:
/ partners / {somethingId} / users 或 / partners / {somethingId} / users / {userId}
我试过Ember的关系,但它对我没有帮助。我得到了params的网址:
return this.store.findRecord('partner', params.id, {include:'users'});
// api/partners/5?include=users
我还尝试了方法store.adapterFor
,它在每次请求之前立即更改了我的适配器的命名空间:
this.store.adapterFor('application').set('namespace', '/api/partners/' + params.id);
但是在每次请求之前做这件事都很脏,所以我不想这样做。
我知道我可以使用类似ajax-ember的东西,但我想使用DS.store和适配器。任何帮助将不胜感激。
答案 0 :(得分:1)
您需要为user
模型创建适配器并覆盖urlForFindRecord
应用程序/适配器/ user.js的
import DS from 'ember-data';
export default DS.JSONAPIAdapter.extend({
urlForFindRecord(id, modelName, snapshot) {
let baseUrl = this.buildURL();
return `${baseUrl}/partners/${id}/users`;
}
});
答案 1 :(得分:1)
不幸的是,ember数据不支持资源的嵌套URL,没有简单的解决方案。您有3个选择:
Ember.$.ajax
请求。您仍然可以使用ember数据进行缓存(像往常一样描述模型并使用DS.Store.pushPayload,DS.Store.hasRecordForId,DS.Store.peekRecord,DS.Store.peekAll等方法)。如果3不是一个选项,我建议2.在我看来,ember数据对于现实生活项目来说限制太多,特别是对于你不能重写后端的情况(无法控制它)。