2012-07-23 118 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