备用网址

时间:2016-09-26 16:42:05

标签: python json django rest ember.js

我是余烬的新手。所以这就是我所面对的。我得到了用python / Django编写的后端RESTAPI。它在/api/works/

上提供以下json响应
[
{
    "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/获取工作详细信息。但是我怎么能得到任务呢?请帮我找到解决这个问题的方法。

1 个答案:

答案 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。