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的任何示例吗?