Ember.js路由 - 有条件地阻止路由/状态更改

Wes*_*man 12 ember.js ember-old-router

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

以前版本的Ember中的状态图为您提供了一个可以使用的过渡对象.似乎在ember-latest中,情况已不再如此.那么最好的方法是什么呢?


编辑:

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

hjd*_*vad 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;
};
Run Code Online (Sandbox Code Playgroud)

请参阅http://jsfiddle.net/hjdivad/KsHCN/ 以获取示例.


Wes*_*man 6

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