名为;“类型”;在Ember数据中具有RESTSerializer的嵌入式记录上-错误未找到模型
我使用余烬数据1.13.4 我有一个带有一些嵌入式记录的模型,假设它们看起来像这样:名为;“类型”;在Ember数据中具有RESTSerializer的嵌入式记录上-错误未找到模型,rest,serialization,ember.js,ember-data,Rest,Serialization,Ember.js,Ember Data,我使用余烬数据1.13.4 我有一个带有一些嵌入式记录的模型,假设它们看起来像这样: var Partner = DS.Model.extend({ name: DS.attr(), addresses: DS.hasMany('address', { async: false } ), }); var Address = DS.Model.extend({ type: DS.attr(), zip: DS.attr(), city: DS.attr(), street
var Partner = DS.Model.extend({
name: DS.attr(),
addresses: DS.hasMany('address', { async: false } ),
});
var Address = DS.Model.extend({
type: DS.attr(),
zip: DS.attr(),
city: DS.attr(),
street: DS.attr()
});
API发回嵌入在合作伙伴
记录中的地址
记录。答复示例:
{
"partners": [
{
"id": 47,
"name": "Johnny",
"addresses": [
{
"id": 7,
"type": "MAIN",
"zip": "1234",
"city": "City-X",
"street": "6. Nowhere"
}
],
},
]
}
问题是Address
模型上的type
只是一个普通属性,但Ember Data希望它是嵌入式模型的类型,我得到以下断言消息:
Error: No model was found for 'MAIN'
其中,'MAIN'
是类型
属性的内容
我不能改变API发回数据的方式,我需要适应它
我该怎么做
编辑:我第一次忘记包括的重要细节。
API有一个
/partners/search
端点,我通过一个直接的ajax请求访问它,然后我(应该)需要调用this.store.pushMany('partner',this.store.normalize('partner',response.partners))代码>这是当“MAIN”的未找到模型时引发的 您的{partners:{addresses:[…]}}
正在返回一个嵌入的数据,但是因为您提供的对象具有id
和type
ember数据,所以理解api返回一个多态关联。并试图找到名为MAIN
的模型,但由于该模型不存在错误:未找到“MAIN”的模型
为了告诉ember数据您的关系已嵌入,您需要覆盖PartnerSerializer
,并包括
运行{partners:{addresses:[…]}}
的此示例的实时演示将返回嵌入的数据,但由于您提供的对象具有id
和type
ember数据,因此理解api返回多态关联。并试图找到名为MAIN
的模型,但由于该模型不存在错误:未找到“MAIN”的模型
为了告诉ember数据您的关系已嵌入,您需要覆盖PartnerSerializer
,并包括
此示例的实时演示正在运行,这也是我找到的解决方案。但是我忘了包括一个非常重要的细节:API有一个/partners/search
端点,我通过直接的ajax请求访问它,然后我(应该)需要调用this.store.pushMany('partner',this.store.normalize('partner',response.partners))
这是当“MAIN”的没有找到模型的时候被提出的。这就是我也找到的解决方案。但是我忘了包括一个非常重要的细节:API有一个/partners/search
端点,我通过直接的ajax请求访问它,然后我(应该)需要调用this.store.pushMany('partner',this.store.normalize('partner',response.partners))代码>这是当“MAIN”的未找到模型时引发的。
App.ApplicationAdapter= DS.RESTAdapter;
App.ApplicationSerializer = DS.RESTSerializer;
App.PartnerSerializer = DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
addresses: { embedded: 'always' }
}
})