我有两个看起来像这样的模型:
// models/database.js
export default DS.Model.extend({
title: DS.attr(),
/*...*/
documents: DS.hasMany('document')
});
// models/document.js
export default DS.model.extend({
name: DS.attr(),
/*...*/
database: DS.belongsTo('database')
});
也有一些路线
Router.map(function() {
this.route('databases', function() {
this.route('database', { path: ":database_id" }, function() {
this.route('documents');
});
});
});
如果什么都没有,我打电话给 / database / [ID] / documents 。
我认为问题是我正在使用JSON HAL API,当我在API上请求数据库时,我收到了这种响应。
{
"_embedded": {
"databases": [
{
"_links": {
"self": {
"href": "<API_URL>/databases/7ec39267b544424c/",
"reference": "7ec39267b544424c",
"title": "00000006"
}
},
"database": {
"name": "00000006",
"reference": "7ec39267b544424c",
"title": "****"
}
},
{
"_links": {
"self": {
"href": "<API_URL>/databases/aace19af004144a4/",
"reference": "aace19af004144a4",
"title": "00000007"
}
},
"database": {
"name": "00000007",
"reference": "aace19af004144a4",
"title": "******"
}
}
}]
}
正如您所看到的,JSON上没有返回文档属性。 如果我想要数据库的文档,我必须调用 [API_URL] / databases / [ID] / domains / [ID] / documents
还有一种方法可以通过指定文档在此URL( / databases / [ID] / domains / [ID] / Documents )中恢复来将文档链接到数据库吗?
答案 0 :(得分:0)
我认为您正在寻找的是HAL API到JSON API转换器。为了避免手动执行此操作,我建议使用http://github.com/201-created/ember-data-hal-9000 Ember插件,我已经用它来使Ember Data与Spring Boot一起玩得很好。
如果你想在这里看到一个简单的例子我的client-side和server-side演示应用。
此外,如果你很好奇Ember和JSON API不使用HAL,你可以在这里阅读JSON API - FAQ on HAL。
答案 1 :(得分:0)
我找到了解决方案。
我在hal序列化器中覆盖了extractRelationships方法,如下所示:
extractRelationships(modelClass, resourceHash, included) {
resourceHash._links["documents"] = {
"href" : "/databases/" + resourceHash.id + "/domains/" + (resourceHash.name || resourceHash[modelClass.modelName].name) + "/documents/"
};
return this._super(modelClass, resourceHash, included);
}
我只需为API返回的每个数据库添加一个文档链接。
我修改了文件的路线
export default Ember.Route.extend(AuthenticatedRouteMixin, {
model() {
return this.modelFor('databases.database').get('documents');
}
});
现在它完美无缺。