Ember.js 余烬模型关系与API不匹配
我有两个模型看起来像这样:Ember.js 余烬模型关系与API不匹配,ember.js,ember-data,Ember.js,Ember Data,我有两个模型看起来像这样: // 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.belon
// 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')
});
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);
}
也有一些路线
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": "******"
}
}
}]
}
{
“_嵌入式”:{
“数据库”:[
{
“_链接”:{
“自我”:{
“href”:“/databases/7ec39267b544424c/”,
“参考文件”:“7ec39267b544424c”,
“标题”:“00000006”
}
},
“数据库”:{
“名称”:“00000006”,
“参考文件”:“7ec39267b544424c”,
“标题”:“***”
}
},
{
“_链接”:{
“自我”:{
“href”:“/databases/aace19af004144a4/”,
“参考文件”:“aace19af004144a4”,
“标题”:“00000007”
}
},
“数据库”:{
“名称”:“00000007”,
“参考文件”:“aace19af004144a4”,
“标题”:“******”
}
}
}]
}
正如您所看到的,JSON上没有返回任何文档属性。
如果我想要数据库的文档,我必须调用[API\u URL]/databases/[ID]/domains/[ID]/documents
还有一种方法可以将文档链接到数据库,方法是指定文档可以在此URL上恢复(/databases/[ID]/domains/[ID]/documents)?我想您要找的是一个to转换器。为了避免自己手动执行此操作,我建议使用Ember插件,我自己使用它来获取Ember数据,以便更好地使用Spring Boot 如果你想看一个简单的例子,这里是我的和演示应用程序 此外,如果您对Ember和JSON API不使用HAL感到好奇,可以在这里阅读。我找到了解决方案 我在hal序列化程序中重写了extractRelationships方法,如下所示:
// 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')
});
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');
}
});
现在它工作得很好。我已经在使用ember-data-hal-9000了,但它对我没有帮助。Eric,你能展示一下在当前ember版本中使用ember-data-hal-9000的任何示例吗?