Ember store.findAll перезагружает представление, а store.query - нет - PullRequest
0 голосов
/ 27 июня 2019

В тот момент, когда статья добавляется в магазин, мое представление не обновляется, когда я использую store.query (), фильтрующую сторону сервера, в моем маршруте, но оно обновляется, когда я использую store.findAll () с фильтрацией.на стороне клиента.

С помощью findAll выполняется фильтрация на стороне клиента

//route.js
model() {
return this.get('store').findAll('article');
}

//controller.js
articleSorted: computed.filterBy('model', 'isPublished', true),

и на стороне сервера фильтрации запросов

//route.js
model() {
  return this.get('store').query('article', { q: 'isPublished' }),
}

Дело в том, что findAll перезагружается изапрос не.

Я нашел это, но не понял https://github.com/emberjs/ember.js/issues/15256

1 Ответ

1 голос
/ 03 июля 2019

спасибо за вопрос. Я постараюсь ответить на него как можно лучше, но мне кажется, что в Руководства по угасанию следует добавить больше документации, чтобы объяснить эту ситуацию this

По существу this.store.findAll() и this.store.query() делают две совершенно разные вещи. findAll() предназначен для представления всех сущностей (статей в вашем случае), поэтому имеет смысл, что результат будет автоматически обновляться по мере того, как магазин найдет больше статей, о которых он должен заботиться. Это происходит потому, что он не возвращает массив статей, он возвращает DS.RecordArray, который будет автоматически обновляться.

query(), с другой стороны, предназначен для того, чтобы каждый раз запрашивать у бэкэнда ожидаемый результат, и вы обычно передаете ряд параметров в вызов query(), который бэкэнд использует для поиска или фильтрации Результаты. Для внешнего интерфейса было бы невозможно точно знать, как серверная часть интерпретирует эти параметры запроса, поэтому он не может автоматически обновляться при добавлении новой статьи, которая удовлетворяла бы тот же запрос.

Имеет ли это смысл? Вы хотите, чтобы я углубился в детали?

...