2016-09-29 9 views
0

Когда пользователь собирается покинуть настоящий маршрут, я хотел бы показать предупреждение и позволить ему выбирать между уходом (и потерей изменений) и пребыванием в текущем маршруте.Emberjs: остановки и повторные переходы в willTransition

Чтобы поймать все возможные переходы, мне нужно сделать это на маршрутах willTransition.

Я пытаюсь до abort(), а затем retry() переход, если пользователь хочет. Но retry не имеет никакого эффекта. Следует отметить, что он называется асинхронно. Вот Twiddle, который демонстрирует, что: https://ember-twiddle.com/b6d8ddb665ff79f2988277912916e77b?openFiles=routes.my-route.js%2C

Вот мой маршрут пример маршрута:

import Ember from 'ember'; 
 

 
export default Ember.Route.extend({ 
 
    actions: { 
 
    willTransition(transition) { 
 
     transition.abort(); 
 
     Ember.run.later(function(){ 
 
     console.log('Transition... now!'); 
 
     transition.retry(); 
 
     }, 2000); 
 

 
     return true; 
 
    } 
 
    } 
 
});

В журнале, но я никогда не попадаю на application маршрут.

ответ

3

Загляните в журнал. Вы увидите, что «Переход ... сейчас!» появляется каждые 2 сек. Это показывает, что willTransition работает снова и снова. Поэтому вам нужен флаг, который позволяет вам уйти. Updated twiddle

+0

Хорошо пойман! Я должен был видеть, как журнал продолжал прибывать :) Спасибо. –

1

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

willTransition(transition) { 
    if (!confirm('Are you sure to navigate ?')) { 
     transition.abort(); 
     return false; 
    } 
    return true; 
} 
+0

Предупреждение сделано через стороннюю библиотеку (сладостно-предупредительный сигнал), для которой требуется подтверждение асинхронности, поэтому я написал «Следует отметить, что он называется асинхронно». –