Ember сбрасывает элементы в Ember data при возврате к маршруту

#javascript #ember.js

#javascript #ember.js

Вопрос:

У меня есть маршрут в моем приложении Ember, который возвращает набор записей в привязке модели следующим образом:

 model() {
  return this.store.findAll('pending-post');
}
  

Предполагая, что это возвращает 10 записей, я могу видеть 10 записей на вкладке data в Ember Inspector и при входе в систему {{model}} . На вкладке сеть также показано, что в объекте данных возвращен массив из 10 записей.

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

Когда я возвращаюсь на панель мониторинга, перехват модели запускается снова. Запрос на вкладке сеть теперь возвращает массив из 9 объектов, поскольку API возвращает только 9 элементов.

Однако на вкладке data в Ember inpector по-прежнему отображаются 10 элементов, и в {{model}} все еще есть 10 элементов.

Каков наилучший способ заставить Ember data удалить элемент, который не был возвращен API во второй раз?

Комментарии:

1. Вы уверены, что pending-post это сущность, а не только подмножество post ? Ваш вариант использования был бы намного проще обработан this.store.query('post', { filter: { pending: true } }) или чем-то подобным.

2. В этом случае pending-post является его собственной сущностью, поэтому параметры запроса не помогли бы, но я понимаю вашу точку зрения на этот вариант использования.

Ответ №1:

Сохранение записи в серверной части возвращает Promise . Следовательно, store.unloadRecord() может использоваться в then обработчике для удаления записи из хранилища.

 record.save().then(function(){
    this.store.unloadRecord(record);
});
  

Или перед запросом модели удалите все записи из хранилища.

 model()
{
    this.store.unloadAll('pending-post');
    return this.store.findAll('pending-post');
}
  

Название модели может быть выделено как верблюжьим шрифтом, так и пунктирным.