Извлечение данных из другой модели Ember - PullRequest
0 голосов
/ 14 марта 2019

У меня есть модель пользователя

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') Но я не могу получить объект пользователя, поэтому я не могу получить данные. Любая помощь будет работать, спасибо.

1 Ответ

2 голосов
/ 14 марта 2019

1) Из местного магазина ember:

если вы хотите получить данные из хранилища ember, вы должны использовать 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');
}
...
...