我是余烬的新手。所以这就是我所面对的。我得到了用python / Django编写的后端RESTAPI。它在/api/works/
[
{
"id": 17,
"title": "about us",
"description": "some project",
"owner": "admin"
},
{
"id": 19,
"title": "test1 profit project",
"description": "dev null",
"owner": "test1"
}
]
另请参阅详细视图E.g:/api/works/17/
:
{
"id": 17,
"title": "about us",
"description": "some project",
"owner": "admin"
}
还有/api/works/17/tasks/
列出工作任务
[
{
"id": 2,
"title": "secondWorkTask",
"description": "task2 description",
"due_date": "2016-09-26",
"assign": 1,
"project": "about us"
},
{
"id": 3,
"title": "some task name",
"description": "some task description",
"due_date": "2016-08-27",
"assign": 2,
"project": "about us"
}
]
在前端,我使用的是ember-cli version2.7.0 + ember-django-adapter。我可以毫无问题地获得/ api / works。
序列化器在ember 上获取项目:
export default DRFSerializer.extend({
normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {
payload.data = payload;
return this._super(...arguments);
}
});
我想要实现的是余烬方,当加载方(emberexample-app.com/app/17/
)上的工作明细网址加载时,它必须显示所有任务。目前,我可以使用以上序列化程序通过此网址/api/works/17/
获取工作详细信息。但是我怎么能得到任务呢?请帮我找到解决这个问题的方法。
答案 0 :(得分:1)
序列化程序用于自定义数据的加载和保存(或序列化和反序列化)。
要自定义URL,您必须使用适配器,例如RESTAdapter是我最常用的适配器。
这适用于您要创建(urlForCreateRecord
)或更新(urlForUpdateRecord
)任务的情况,但如果您只想转换后跟work.get('tasks')
,则可能无法直接使用与belongsTo
的{{1}}关系,至少在我的情况下,它并没有“正常工作”。
我发现一个非常有效的解决方案是将一个属性GET http://endpoint/work/<work_id>/tasks
作为普通对象添加到父对象,该对象包含指向要作为属性检索的不同子模型的链接。
这样的事情:
links
在此示例中,当Ember尝试从工作模型中获取任务属性时,它将对/* app/adapters/work.js */
import DS from 'ember';
export default DS.RESTSerializer({
normalize (model, hash, prop) {
hash.links = hash.links || {};
hash.links.tasks = this.buildURL(model, hash.id) + '/tasks';
return this._super(model, hash, prop);
}
});
包含的URL进行GET。