Выборка данных из Ember другой модели

#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.