#ember.js #ember-data
#ember.js #ember-data
Вопрос:
У меня есть пользовательская модель
export default DS.Model.extend({
username : DS.attr('string'),
numberOfQuotes: DS.attr('number'),
numberOfFollowers: DS.attr('number'),
numberOfFollowing: DS.attr('number')
});
и модель кавычек
export default DS.Model.extend({
user: DS.belongsTo('user'),
text: DS.attr('string')
});
И я получаю кавычки, которые также включают идентификатор пользователя, и для этого я использую
quotes :this.store.findAll('quote')
Но я не могу получить объект user, поэтому я не могу восстановить данные. Любая помощь сработает, спасибо.
Комментарии:
1. вы извлекаете данные из
server
илиember local store
? Если отserver
, не могли бы вы, пожалуйста, привести пример ответа JSON? Включает ли ваш ответ сервераuser
объект ?2. я получаю данные из локального хранилища ember.
3. я изменил свой ответ. пожалуйста, проверьте
Ответ №1:
1) Из локального хранилища ember:
если вы хотите получить данные из ember Store, вы должны использовать peekAll
. Используйте вычисляемое свойство в вашем контроллере или компоненте,
...
quotes: computed(function() {
return this.store.peekAll('quote');
}),
...
Затем вы можете получить пользовательские данные в своем шаблоне следующим образом,
{{#each quotes as |quote|}}
{{quote.user.username}}
{{/each}}
2) С сервера:
примечание: findAll
запрос ожидает, что данные будут в виде массива.
при использовании RestAdapter,
{ quotes:
[ {
id: 1,
text: "sample1",
user: { username: "name1", numberOfQuotes: "5" }
},
{
id: 2,
text: "sample2",
user: { username: "name2", numberOfQuotes: "8" }
}
]
}
при использовании JSONAPIAdpater,
{ quotes:
[ {
id: 1,
text: "sample1",
user: 10
},
{
id: 2,
text: "sample2",
user: 11
},
{
id: 3,
text: "sample3",
user: 10
}
],
users:
[ {
id: 10,
username: "name1",
numberOfQuotes: "5"
quotes: [1,3]
},
{
id: 11,
username: "name2",
numberOfQuotes: "8"
quotes: [2]
}
]
}
При выполнении findAll
запроса в вашем перехватчике модели маршрута любой из вышеперечисленных ответов будет таким, какой вы получите на основе используемого вами APIAdapter.
...
model: function() {
return this.store.findAll('quote');
}
...
Комментарии:
1. Что, если бы у меня были данные в « { id: 1, текст: «Привет, я работаю над Ember 3», пользователь: 1 }, { id: 2, текст: «Ember 2.0 классный!», пользователь: 1 }, { id: 3, текст: «Привет еще раз!», пользователь: 1, } « и я хотел получить данные пользователя, используя user id
2. изменили ответ в соответствии с вашим запросом. Пожалуйста, взгляните на
http://andycrum.github.io/ember-data-model-maker/
и выберите, какой адаптер вы используете, и проверьте, каковы ожидаемые данные ответа, которые ожидает ember.