【发布时间】:2017-02-14 22:40:27
【问题描述】:
你能帮帮我吗?
我有一个模型 Channel、一个模型 Feature、一个模型 ChannelApplication 和一个模型 ApplicationFeature。我这样定义它们:
我的模特channel.js:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';
export default Model.extend({
name: attr('string'),
key: attr('string'),
multiplePages: attr('boolean'),
features: hasMany('feature', { async: true })
});
我的模特feature.js:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { hasMany } from 'ember-data/relationships';
export default Model.extend({
name: attr('string'),
key: attr('string'),
applicationFeatures: hasMany('application-feature', { async: true }),
channels: hasMany('channel', { async: true })
});
我的模特channel-application.js:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo, hasMany } from 'ember-data/relationships';
export default Model.extend({
name: attr('string'),
clientId: attr('string'),
channel: belongsTo('channel'),
applicationFeatures: hasMany('application-feature', { async: true })
});
我的模特application-feature.js
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
import { belongsTo } from 'ember-data/relationships';
export default Model.extend({
scope: attr('string'),
connectType: attr('string'),
channelApplication: belongsTo('channel-application', { async: true }),
feature: belongsTo('feature', { async: true })
});
我正在使用 JSONAPI。在我的路线中,我这样做:
model() {
return Ember.RSVP.hash({
profiles: this.store.findAll('profile'),
channels: this.store.findAll('channel'),
channelApplications: this.store.query('channel-application', { filter: { feature: 'inbox'} })
})
}
因此,在我的模板中,我需要获取我的ChannelApplications,并且对于每个Channel,我都需要知道与此ChannelApplications 相关的每个ApplicationFeature。
{{#each channelApplications as |channelApplication|}}
{{channelApplication.id}}
// I think in something like this, but this doesn't work of course
{{#each channelApplication.channels as |channel|}}
<span>{{channel.id}}</span>
<span>{{channel.name}}</span>
{{#each channelApplication.applicationFeatures as |applicationFeature|}}
<span>{{applicationFeature.id}}</span>
<span>{{applicationFeature.name}}</span>
{{/each}}
{{/each}}
{{/each}}
channelApplication.applicationFeatures 和 channelApplication.channels 不返回任何内容。
当我打印 {{channelApplication.applicationFeatures.length}} 时,它返回 0。
当我打印{{channelApplication.applicationFeatures}} 时,它会打印<DS.PromiseManyArray>
channelApplications: this.store.query('channel-application', { filter: { feature: 'inbox'} }) 的 JSONAPI 返回:
{
"data":[
{
"type":"channel-applications",
"id":"2",
"attributes":{
"name":"Application1",
"channel-id":1,
"client-id":"123"
},
"relationships":{
"application-features":{
"data":[
{
"type":"application-features",
"id":"3"
}
]
}
}
},
{
"type":"channel-applications",
"id":"4",
"attributes":{
"name":"Application2",
"channel-id":2,
"client-id":"456"
},
"relationships":{
"application-features":{
"data":[
{
"type":"application-features",
"id":"7"
}
]
}
}
},
{
"type":"channel-applications",
"id":"5",
"attributes":{
"name":"Application3",
"channel-id":3,
"client-id":"001"
},
"relationships":{
"application-features":{
"data":[
{
"type":"application-features",
"id":"9"
},
{
"type":"application-features",
"id":"10"
},
{
"type":"application-features",
"id":"11"
},
{
"type":"application-features",
"id":"12"
}
]
}
}
}
],
"included":[
{
"type":"application-features",
"id":"3",
"attributes":{
"channel-application-id":2,
"feature-id":3,
"scope":"teste1, teste2, teste3",
"connect-type":"script"
}
},
{
"type":"application-features",
"id":"7",
"attributes":{
"channel-application-id":4,
"feature-id":3,
"scope":"",
"connect-type":"redirect"
}
},
{
"type":"application-features",
"id":"9",
"attributes":{
"channel-application-id":5,
"feature-id":1,
"scope":"teste4, teste5",
"connect-type":"redirect"
}
},
{
"type":"application-features",
"id":"10",
"attributes":{
"channel-application-id":5,
"feature-id":2,
"scope":"",
"connect-type":"password"
}
},
{
"type":"application-features",
"id":"11",
"attributes":{
"channel-application-id":5,
"feature-id":3,
"scope":"",
"connect-type":"password"
}
},
{
"type":"application-features",
"id":"12",
"attributes":{
"channel-application-id":5,
"feature-id":4,
"scope":"",
"connect-type":"password"
}
}
]
}
那么,有人知道我做错了什么吗?
【问题讨论】:
标签: javascript ember.js ember-data json-api