12

我试图弄清楚如何防止或暂停路线更改。对于我的编辑屏幕,如果用户在未保存更改时导航离开(后退按钮或其他机制),我想提示他们确保他们想要离开页面。与 非常相似window.onbeforeunload,但通过路由器。

以前版本的 Ember 中的状态图为您提供了一个可以使用的转换对象。似乎在 ember-latest 中,情况不再如此。那么解决这个问题的最佳方法是什么?


编辑:

上述问题很旧,列出的答案已过时。Ember 现在有一种本地方式来处理这个问题。请参阅文档:http ://emberjs.com/guides/routing/preventing-and-retrying-transitions/

4

3 回答 3

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/ 。

于 2012-07-26T16:02:04.150 回答
6

Ember 的路由器现在有一个本地机制可以很容易地做到这一点。请参阅文档:http ://emberjs.com/guides/routing/preventing-and-retrying-transitions/

于 2013-12-26T02:28:59.340 回答
2

我不确定这是否可能,因为在退出状态之前(也许我错过了一些东西)没有可用的处理程序。查看触发进入状态enterState() 代码,看起来您无法中断或取消两种状态之间的转换。

我认为这是由 Tom Dale 在Allow canceling state transitions中解释的。

在您的情况下,也许您可​​以声明一个中间状态,如果用户取消,则负责重定向到先前的状态,或者如果用户接受,则转到新状态。我不得不说编写比实现更容易:(

于 2012-07-23T22:57:49.620 回答