#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 хороший момент, спасибо, только что изменил. если у вас есть дополнительные предложения, пожалуйста, не стесняйтесь редактировать мой ответ. большое спасибо.