2012-07-23 115 views
12

我想弄清楚如何防止或暫停路由改變。對於我的編輯屏幕,如果用戶在未保存更改時導航(後退按鈕或其他機制),我想提示他們確保他們想離開頁面。非常類似於window.onbeforeunload,但通過路由器。Ember.js路由 - 有條件地阻止路由/狀態改變

以前版本的Ember中的狀態圖爲您提供了一個可以使用的過渡對象。最近似乎並不是這樣。那麼最好的辦法是什麼呢?


編輯:

上面的問題是舊的,列出的答案是過時了。 Ember現在有一個原生的方式來處理這個問題。請參閱文檔:http://emberjs.com/guides/routing/preventing-and-retrying-transitions/

回答

2

我不確定這是可能的,因爲有(可能我錯過了某件事情)在退出狀態之前沒有可用的處理程序。 看着triggering enter stateenterState() code,看起來你不能中斷或取消兩種狀態之間的轉換。

我認爲這是由湯姆戴爾在Allow canceling state transitions解釋。

在你的情況下,也許你可以聲明一箇中間狀態負責重定向到先前狀態,如果用戶取消,或者如果用戶接受,則轉到新狀態。我不得不說這是比較容易寫,而不是執行:(

+0

我將與湯姆·戴爾的GitHub上的迴應同意這應該被標記爲接受的答案 – dmzza 2012-10-26 21:41:21

8

你想要做的是讓你的轉換條件是什麼,而不是直接使用Ember.Route.transitionTo的,你想要的東西,如:。

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; 
}; 

看到http://jsfiddle.net/hjdivad/KsHCN/爲。例如

+0

真的很好!我保持鏈接到你的小提琴... :-) – 2012-08-02 08:22:52