我正在使用Ember 1.5构建一个Web应用程序,我使用Ember Model 0.0.11将应用程序链接到API。我目前无法让Ember Model使用嵌套的API端点。
例如,我的应用有User
模型,与hasMany
模型有Post
关系。现在,当我想为某个用户加载帖子时,我希望使用Post.findQuery('user_id', {user_id});
方法来访问GET /users/{user_id}/posts
端点。相反,似乎Ember Model解决方案更喜欢将查询作为参数发送到GET /posts
端点。
Ember Model的RESTAdapter
确实可以轻松定制,但在我开始编写完全自定义的RESTAdapter
之前,我很想知道是否有人已经这样做以及他们是如何解决问题的。
答案 0 :(得分:0)
我们处理嵌套API路由的解决方案是使用请求的有效负载返回链接哈希。如果您可以更改API输出,这是现在的方法。例如,在请求工作空间时,返回的JSON看起来像这样(原谅转义的字符):
{
"data":
{
"object":"workspace",
"id":"wrk_krVZWGaJ",
"organization_name":"Legros, Klein and Boehm",
"workspace_name":"Legros, Klein and Boehm",
"workspace_path":"legros, klein and boehm",
"status":true,
"credit_production":7,
"credit_revision":16,
"links":{
"projects":"\/v1\/workspaces\/wrk_krVZWGaJ\/projects",
"productions":"\/v1\/workspaces\/wrk_krVZWGaJ\/productions",
"subscription":"\/v1\/workspaces\/wrk_krVZWGaJ\/subscription",
"assets":"\/v1\/workspaces\/wrk_krVZWGaJ\/assets",
"descriptions":"\/v1\/workspaces\/wrk_krVZWGaJ\/descriptions",
"roles":"\/v1\/workspaces\/wrk_krVZWGaJ\/roles",
"registrations":"\/v1\/workspaces\/wrk_krVZWGaJ\/registrations",
"users":"\/v1\/workspaces\/wrk_krVZWGaJ\/users"
}
}
}
模型将链接定义为async hasMany关系,即DS.attr('projects', {async: true})
。从商店加载工作区时,不包括链接的项目。当您在其他地方使用{{#each workspace.projects}}
或workspace.get('projects')
时,ember-data将向/v1/workspaces/wrk_krVZWGaJ/projects/
发出GET请求,而不是默认路由/projects/
。 Neato,是吗?
有关RESTAdapter findHasMany method的详细信息。