Как загрузить вложенные записи (основные записи), используя Ember Data?
Основная запись, приложение / модели / аккаунт:
import DS from 'ember-data';
export default DS.Model.extend({
username: DS.attr('string'),
emailaddress: DS.hasMany('emailaddresses'),
birthdate: DS.attr('date'),
gender: DS.attr('boolean')
});
Подробная запись, приложение / модели / адрес электронной почты:
import DS from 'ember-data';
export default DS.Model.extend({
account: DS.belongsTo('account'),
emailaddress: DS.attr('string'),
verificationcode: DS.attr('string'),
isverified: DS.attr('string')
});
Фиктивная строка JSON с сервера:
{"id": 0, "username": "ikevin", "birthdate": "30 января 2017 г. 1:34:38 PM","sex":true,"emailaddresses":[{"id":0,"EMAILADDRESS":"aaa@bbb.com","verificationcode":"AAAAAA","isverified" ложь}]}
Адаптер /app/adapters/account.js
import ApplicationAdapter from './application';
export default ApplicationAdapter.extend({
urlForQueryRecord(query) {
if (query.profile) {
delete query.profile;
return `${this._super(...arguments)}/profile`;
}
return this._super(...arguments);
}
});
Маршрут app/route/index.js:
import Ember from 'ember';
import RSVP from 'rsvp';
export default Ember.Route.extend({
model() {
return RSVP.hash({
walletbalance: this.get('store').queryRecord('wallet', {balance: true}),
instagramfriendscount: this.get('store').queryRecord('instagram', {friendscount: true}),
accountprofile: this.get('store').queryRecord('account', {profile: true})
});
}
});
И приложение / шаблоны / компоненты /account-profile.hbs:
<div class="box">
<div class="title">Your Profile</div>
<div>Username: {{account.accountprofile.username}}</div>
<div>Email Address: {{account.accountprofile.emailaddess}}</div>
<div>Birthdate: {{account.accountprofile.birthdate}}</div>
<div>Gender: {{account.accountprofile.gender}}</div>
</div>
Я думаю, что здесь есть 2 проблемы:
В плагине Chrome Ember данные для типа модели "адрес электронной почты" всегда равны 0. Таким образом, это означает, что он не загружен.
В приложении /templates/components/account-profile.hbs {{account.accountprofile.emailaddess}} не ссылается на правильное поле. Примечание: на данный момент ожидается отображение только 1 адреса электронной почты.
Как решить эти проблемы для загрузки и отображения вложенных записей?
Спасибо!
1 ответ
Да, я решил это сам
Я изменил его на Nested Arrays (как указано здесь: http://thejsguy.com/2016/01/29/working-with-nested-data-in-ember-data-models.html)
Таким образом, строка, возвращаемая с сервера, становится:
{"id": 0, "username": "ikevin", "birthdate": "30 января 2017 г. 14:01:14 PM","sex":true,"emailaddresses":[{"emailaddress":"aaa@bbb.com","verificationcode":"AAAAAA","isverified" ложь}]}
И в.hbs:
<div>Email Address: {{account.accountprofile.emailaddresses.0.emailaddress}}</div>
Он отображает адрес электронной почты!
Спасибо!