2012-07-23 6 views
12

Próbuję wymyślić, jak zapobiec lub przerwać zmianę trasy. W przypadku ekranów do edycji, jeśli użytkownik odejdzie (przycisk Wstecz lub inny mechanizm), gdy mają niezapisane zmiany, chciałbym poprosić ich o upewnienie się, że chcą opuścić stronę. Bardzo podobny do window.onbeforeunload, ale za pośrednictwem routera.Trasa Ember.js - warunkowo zapobiegaj zmianie trasy/stanu

Statechart w poprzednich wersjach Ember dał ci obiekt przejściowy, którego mógłbyś użyć. Wygląda na to, że w Ember nie ma już miejsca. Więc jaki jest najlepszy sposób, aby to osiągnąć?


EDIT:

Powyższa kwestia jest stary i odpowiedzi wymienione są datowane. Ember ma teraz natywny sposób radzenia sobie z tym. Zobacz dokument: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/

Odpowiedz

2

Nie jestem pewien, czy jest to możliwe, ponieważ istnieje (być może coś przeoczyłem) żaden przewodnik nie jest dostępny przed wyjściem ze stanu. Patrząc na triggering enter state i enterState() code, wygląda na to, że nie można przerwać ani anulować przejścia między dwoma stanami.

Myślę, że to wyjaśnia Tom Dale w Allow canceling state transitions.

W twoim przypadku być może możesz zadeklarować stan pośredni odpowiedzialny za przekierowanie do poprzedniego stanu, jeśli użytkownik anuluje, lub przejście do nowego stanu, jeśli użytkownik zaakceptuje. Muszę powiedzieć, że łatwiej napisać niż wdrożyć :(

+0

zgadzam się z odpowiedzią Toma Dale'a na GitHub ten powinien być oznaczony jako zaakceptowanej odpowiedzi – dmzza

8

Co chcesz zrobić, to dokonać przejścia warunkowego Zamiast Ember.Route.transitionTo bezpośrednio, chcesz coś takiego:.

var transitionAfterConfirmation = function(target){ 
    var defaultEvent = Ember.Route.transitionTo(target), 
     event = function(stateManager, context){ 
      if(confirm("Really go?")){ 
       defaultEvent(stateManager,context); 
      } 
     }; 

    event.transitionTarget = target; 

    return event; 
}; 

zobaczyć http://jsfiddle.net/hjdivad/KsHCN/ dla . Przykład

+0

Naprawdę ładne! Trzymam link do twojego skrzypiec ... :-) –