Ember Data: когда я использую findAll () вместо query ()? - PullRequest
0 голосов
/ 15 февраля 2019

Это шаблон, с которым я сталкиваюсь:

Я начинаю создавать приложение и использую findAll(), чтобы получить список [чего-то случайного].

Как только приложение тестируется с серьезными данными, количество случайных экземпляров ресурса будет расти.Мне нужно ограничить количество экземпляров ресурса на экране.Мне нужно начать разбивать их на страницы.Для этого мне нужна поддержка строки запроса.Например, page[offset].

. Таким образом, findAll(criteria) заменяется на query(criteria, querystring).

. Это такой шаблон, что findAll() начинает выглядеть как заполнитель разработки для query()будет использоваться позже.

Я, вероятно, неправильно понимаю использование для findAll().Правда ли, что findAll() вообще не может использовать нумерацию страниц (без настройки кода адаптера)?Может кто-нибудь объяснить, в каких случаях findAll() следует использовать?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Чтобы расширить ответ Джин, findAll делает именно это, находит все!Если у вас были такие объекты, как «типы постов», где у вас есть [реклама, блог, поэма], findall имеет смысл, потому что вы все время тянете эти 3 вещи (например, в «создателе поста»).

Запрос точнее.Скажем, у вас был API, возвращающий каждую машину, которую вы когда-либо видели.Допустим, у вас была модель «car» со свойствами «color» и «bodyStyle». Вы можете использовать:


// find all red cars -> /cars?color=red
store.query('car', {color: 'red'});

// find all cars that are coupes -> /cars?bodyStyle=coupe
store.query('car', {bodyStyle: 'coupe'});

К вашему вопросу о разбиении на страницы это обычно реализуется в API.Популярный шаблон - принимать / возвращать свойства "page" и "count".Обычно их можно найти в свойстве «meta» полезной нагрузки API.

Так что, если вы хотите просмотреть все машины, которые вы знаете / имеете в своей базе данных:

// find first 10 cars -> /cars?count=10&page=1
store.query('car', {count: 10, page: 1});

// on the next page, find the next 10 cars -> /cars?count=10&page=2
store.query('car', {count: 10, page: 2});

Это ничего не стоитчто для продолжения собственного исследования вы должны изучить привязку параметров запроса на контроллерах, чтобы облегчить трудозатраты, необходимые для реализации такого решения.

https://guides.emberjs.com/release/routing/query-params/

В примерах по этой ссылке вы можетепосмотрите, как вы можете переходить к маршрутам и использовать параметры запросов в запросах вашего магазина для извлечения соответствующих данных.

Короче говоря, findAll () отлично подходит для поиска конечного набора легко представляемой информации, обычно типов объектов..

query () отлично подходит для любого отфильтрованного набора результатов на основе критериев, как вы упомянули.

Happy Coding:)

0 голосов
/ 15 февраля 2019

Я лично использую метод findAll для извлечения данных, которые появляются в различных раскрывающихся списках и коротких списках, которые не могут быть отфильтрованы пользователем.Я использую query и queryRecord для почти всего остального.

Вот пара особенностей findAll, которые могут вводить в заблуждение:

  • findAll возвращает всезаписей, присутствующих в хранилище, вместе с данными, которые выбираются с использованием адаптера записи.
  • Возвращение findAll является двойным, сначала вы получите содержимое хранилища, а затем оно будетобновляя данные, полученные с помощью адаптера, это поведение можно изменить с помощью флага reload.
...