Подтвердить что ты не робот

DEPRECATION: поведение по умолчанию shouldReloadAll будет изменяться в Ember Data 2.0, чтобы всегда возвращать false, когда есть хотя бы один

В момент этого вопроса я запускаю последние версии Ember и Ember Data.

enter image description here

Я работаю с DS.RESTAdapter, вызывающим /places следующим образом:

this.store.findAll('place');

Модель имеет только атрибут name name: DS.attr('string') JSON:

{
  places: [
    {
      id: 1,
      name: "San Francisco"
    },
    {
      id: 2,
      name: "Havana"
    }
  ]
}

Я сделал шаблон и с соответствующим each, и все появилось и работает до сих пор, но я получаю предупреждения об устаревании, которые сообщают следующее:

DEPRECATION: поведение по умолчанию shouldReloadAll будет меняться в Ember Data 2.0 всегда возвращает false, если есть хотя бы один запись "destination" в магазине. Если вы хотите сохранить текущее поведение, пожалуйста, переопределите shouldReloadAll в вашем адаптер: приложение и вернуть true.

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

4b9b3361

Ответ 1

Установите shouldReloadAll() { return true; } в адаптер приложения, и предупреждение исчезнет, ​​а текущее поведение по умолчанию - то же самое.

Ответ 2

Чтобы ответить на вопрос @Эрик Уилсон:

Я вручу награду за ответ, содержащий необходимые детали для переопределения функции shouldReloadAll. Другими словами, я не может понять, что делать с этими фрагментами кода.

Первое использование:

ember g adapter application

Затем перейдите к вновь созданному app/adapters/application.js и замените код на:

import DS from 'ember-data';

export default DS.JSONAPIAdapter.extend({
  shouldReloadAll() {
    return true;
  }
});

Вы закончили. Демо на Ember Twiddle.

Возвращая true из shouldReloadAll функция в основном инструктирует Ember повторно выбирать модели каждый раз, когда вы вызываете метод findAll и запрос на пожар на ваш сервер.

Если вы знаете, что эти данные не будут меняться, например, в течение следующих 2 минут, вы можете реализовать некоторую логику в shouldReloadAll, которая помешала бы Эмберу отпустить ненужный запрос (например, проверить, прошло ли 2 минуты, если нет предотвратить запрос - return false).

См. DS.Adapter.shouldReloadAll документацию метода для большего контекста.

Ответ 3

Чтобы соответствовать новому поведению по умолчанию, переопределите shouldReloadAll следующим образом:

function shouldReloadAll( store, snapshot ) {
    return !store.peekAll( snapshot.type.modelName ).length
}