Ember.js Ember not设置在检索数据后具有多个关系属性

Ember.js Ember not设置在检索数据后具有多个关系属性,ember.js,ember-data,Ember.js,Ember Data,前言:在这个项目中有很多第一次,比如构建我的第一个API,第一次使用JSON API,第一次使用Ember,第一次发布SO等等 我正在尝试访问包含最新更新的模板中的“authors”hasMany属性。但是,我在模板中访问的内容没有返回任何内容。模型被正确保存,但是关系没有被设置,因为最新.contentAuthors上的DS.PromiseManyArray的长度是0,而承诺被履行({u length:0,isimplemented:true,isRejected:false}) 我使用的是E

前言:在这个项目中有很多第一次,比如构建我的第一个API,第一次使用JSON API,第一次使用Ember,第一次发布SO等等

我正在尝试访问包含最新更新的模板中的“authors”
hasMany
属性。但是,我在模板中访问的内容没有返回任何内容。模型被正确保存,但是关系没有被设置,因为
最新.contentAuthors
上的
DS.PromiseManyArray
的长度是
0
,而承诺被履行(
{u length:0,isimplemented:true,isRejected:false}

我使用的是Ember 3.10(带有CLI)。我完全控制了我的后端(运行ExpressionEngine 5的LAMP),并通过一个定制插件提供API请求,尽管我不确定这是否重要,因为从我所能看出,这在很大程度上是一个前端问题

路线

最新型号
编辑:删除了原始代码中没有的冗余属性

import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';

export default ExpressionEngineBase.extend({
    blurb: DS.attr(),
    contentAuthors: DS.hasMany('person')
});
import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';

export default ExpressionEngineBase.extend({
    latest: DS.hasMany('latest')
});
人物模型
编辑:删除了原始代码中没有的冗余属性

import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';

export default ExpressionEngineBase.extend({
    blurb: DS.attr(),
    contentAuthors: DS.hasMany('person')
});
import DS from 'ember-data';
import ExpressionEngineBase from './expression-engine-base';

export default ExpressionEngineBase.extend({
    latest: DS.hasMany('latest')
});
模板

{{{#每个this.model作为|最新|}
{{latest.title}
{{{#每个最新的.contentAuthors作为| author}}
{{author.title}}
{{else}
找不到作者
{{/每个}}
{{latest.blurb}}

{{/每个}}
从服务器发送的数据
编辑:对照a对此进行检查,发现原件不符合要求。我已经更新了后端,但这并没有解决问题。根据该验证器,这现在是一致的

{
    "data": [{
        "id": "3161",
        "type": "latest",
        "attributes": {
            "title": "Amazing Video 1"
        },
        "links": {
            "self": "https:\/\/cms.example.com\/api\/v1\/video\/3161"
        },
        "relationships": {
            "people": {
                "data": [{
                    "id": "1",
                    "type": "people"
                }]
            }
        }
    }, {
        "id": "2573",
        "type": "latest",
        "attributes": {
            "title": "Amazing Article 1"
        },
        "links": {
            "self": "https:\/\/cms.example.com\/api\/v1\/white_papers_insights\/2573"
        },
        "relationships": {
            "people": {
                "data": [{
                    "id": "1",
                    "type": "people"
                }, {
                    "id": "52",
                    "type": "people"
                }]
            }
        }
    }],
    "links": {
        "self": "https:\/\/cms.example.com\/api\/v1\/latest?include=people&limit=2"
    },
    "included": [{
        "id": "1",
        "type": "people",
        "links": {
            "self": "https:\/\/cms.example.com\/api\/v1\/people\/1",
            "channel": "https:\/\/cms.example.com\/api\/v1\/people"
        },
        "attributes": {
            "title": "Great Author"
        }
    }, {
        "id": "52",
        "type": "people",
        "links": {
            "self": "https:\/\/cms.example.com\/api\/v1\/people\/52",
            "channel": "https:\/\/cms.example.com\/api\/v1\/people"
        },
        "attributes": {
            "title": "Great Co-Author"
        }
    }]
}
再次重申,关系模型正在保存,并且可以在Ember Inspector中查看,但未设置实际的链接/关系


更新:我尝试重命名类型和查询参数,但没有成功,检查屈折是否与删除的关系有关

模型中的关系名为
contentAuthors
,但在有效负载中,您将其命名为
people

因此,与此相反:

"people": {
  "data": [{
    "id": "1",
    "type": "people"
  }]
}
这样做:

"contentAuthors": {
  "data": [{
    "id": "1",
    "type": "people"
  }]
}
如果您的模型中有
contentAuthors:DS.hasMany('person')



旁注:
latest
不是一个好的型号名称。模型名称应始终为名词,或至少以一个结尾。

模型中的关系名为
contentAuthors
,但在有效负载中,您可以将其命名为
people

因此,与此相反:

"people": {
  "data": [{
    "id": "1",
    "type": "people"
  }]
}
这样做:

"contentAuthors": {
  "data": [{
    "id": "1",
    "type": "people"
  }]
}
如果您的模型中有
contentAuthors:DS.hasMany('person')



旁注:
latest
不是一个好的型号名称。型号名称应始终为名词,或至少以一个结尾。

Wow!当我在有效载荷中玩弄名字时,我完全没有意识到这会对它产生什么影响。这成功了!谢谢你关于模型命名约定的提示。哇!当我在有效载荷中玩弄名字时,我完全没有意识到这会对它产生什么影响。这成功了!感谢您提供有关模型命名约定的提示。