我正在试图弄清楚如何阻止或暂停路线更改。对于我的编辑屏幕,如果用户在未保存的更改时导航(后退按钮或其他某种机制),我想提示他们确保他们想要离开页面。与window.onbeforeunload
非常相似,但是通过路由器。
以前版本的Ember中的状态图为您提供了一个可以使用的过渡对象。似乎在ember-latest中,情况已不再如此。那么最好的方法是什么呢?
修改
上述问题已陈旧,所列答案已过时。 Ember现在有一种本地方式来处理这个问题。请参阅文档:http://emberjs.com/guides/routing/preventing-and-retrying-transitions/
答案 0 :(得分: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/以获取示例。
答案 1 :(得分:6)
Ember的路由器现在有一个本机机制,可以很容易地做到这一点。请参阅文档:http://emberjs.com/guides/routing/preventing-and-retrying-transitions/
答案 2 :(得分:2)
我不确定这是可能的,因为在退出州之前(或许我遗漏了一些东西)没有可用的处理程序。 查看triggering enter state和enterState() code,看起来您无法中断或取消两个州之间的转换。
我认为Tom Dale在Allow canceling state transitions中解释了这一点。
在您的情况下,也许您可以声明一个中间状态,如果用户取消则负责重定向到先前状态,或者如果用户接受则转到新状态。我不得不说写它比实现更容易:(