Ember2.8: обновить абсолютно все на transitionToRoute (‘/ route’)

#ember.js

#ember.js

Вопрос:

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

 goBackHome() {
  this.transitionToRoute('/games');
},
  

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

 goBackHome() {
  this.transitionToRoute('games');
},
  

В принципе, он не выполняет жесткого обновления всего. Я бы хотел, чтобы при вызове transitionToRoute для перезагрузки маршрута, как если бы я сам вводил точный URL-адрес в браузер.

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

1. Предполагается, что вы должны передавать не URL transitionToRoute -адреса, а имя маршрута, к которому вы хотите перейти.

2. Вы всегда можете установить вручную window.location . Однако я не рекомендую этого делать, это вызовет полную перезагрузку приложения. Может быть, просто вызвать .rollbackAttributes() вашу модель?

3. @Lux Это именно то, что я искал. Спасибо! Мне не нужно сохранять какие-либо изменения в моих моделях в приложении, поэтому этот изящный трюк сработал отлично.

Ответ №1:

Ну, я пытаюсь написать возможный способ сделать это, надеюсь, вы сможете выбрать один и решить свою проблему.

вам нужно добавить this.refresh(); либо в ваш метод, либо в model() , чтобы принудительно перезагрузить модель для получения новых данных (зависит от того, что вам нужно)! если вы хотите перезагрузить местоположение всего окна, я имею в виду, просто добавьте location.reload();

одним из примеров должно быть

 model(id){
    var post = this.get('store').find('post', id); // Find the post from the store
    post.reload(); // Force a reload
    return post;  // Return the fetched post NOW and the information will be updated.
  }
  

Более того, вы можете сделать что-то еще в своей модели () посмотрите на пример :

  model(params) {
    return this.store.findRecord('whatever', params.id, { reload: true });
  }
  

это { reload: true } позволяет модели получать свежие данные, это также может быть реализовано findAll .

ссылка: На данный момент я просто использую перехват afterModel для принудительной перезагрузки, но было бы неплохо снова включить флаг перезагрузки.

итак, вы можете сделать и другой способ, то есть вы можете отправить параметр функции и получить его в route и в route actions , который у вас может быть this.referesh() ! чтобы перезагрузить модель. В этом случае вам нужно добавить this.sendAction('actionName'); и в маршрут actionName(){this.referesh();}

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

1. «принудительно перезагружать режим каждый раз» это не совсем то, что он делает, и не имеет значения model() , пропущен ли перехват.

2. @lokcs хороший момент, спасибо, только что изменил. если у вас есть дополнительные предложения, пожалуйста, не стесняйтесь редактировать мой ответ. большое спасибо.