Как перезагрузить модель маршрута из контроллера в Ember? - PullRequest
0 голосов
/ 07 февраля 2019

В настоящее время я борюсь с задачей, которая, как я ожидал, будет довольно простой или обычной: я хотел бы инициировать перезагрузку модели маршрута в контроллере.Насколько я понимаю, нет простого способа сделать это?Да, я могу получить доступ к объекту RouteInfo с помощью свойства target контроллера, но оттуда я не вижу способа обновить модель.

Небольшая предыстория о задаче, которую я пытаюсь решить: у меня естьмаршрут с моделью, которая предоставляет последний объект из коллекции, для которой не установлен определенный флаг (например, «не проиндексирован» в объекте маршрута / индекса).Теперь пользователь работает с этим объектом и запускает действие в контроллере, который устанавливает этот флаг (в «индексированный»).Поэтому, если я перезагружу маршрут, перемещаясь назад и вперед, будет показан следующий объект.Но я хочу вызвать эту перезагрузку непосредственно в действии (конечно, без перезагрузки всей страницы).

Мой вопрос: возможно ли это или есть другой / правильный способ достижения того, чего я пытаюсь достичь?

1 Ответ

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

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

import Route from '@ember/routing/route';

export default Route.extend({
  model() {
    return someFunctionThatFetchesYourData();
  }
});

Затем в вашем элементе управления используйте вычисляемое свойство, чтобы отфильтровать нужный элемент:

import Controller from '@ember/controller';
import { computed } from '@ember/object';

export default Controller.extend({
  firstObjectWithProperty: computed('model.@each.notIndexed', function(){
    return this.model.find(obj => obj.notIndexed);
  }),
});

Тогда вы можете просто использовать {{firstObjectWithProperty}} в своем шаблоне, и если флаг notIndexed будет изменен, он будет пересчитан.

...