Ember.js routing - conditionally prevent route/state change

狂风中的少年 提交于 2019-12-03 06:05:06

问题


I'm trying to figure out how to prevent or pause a route change. For my edit screens, if the user navigates away (back button or some other mechanism) when they have unsaved changes, I would like to prompt them to make sure they want to leave the page. Very similar to window.onbeforeunload, but via the router.

The statechart in previous versions of Ember gave you a transition object that you could use. It seems that in ember-latest, this is no longer the case. So what's the best way to go about this?


EDIT:

The above question is old and the answers listed are dated. Ember now has a native way to handle this. See docs: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/


回答1:


What you want to do is make your transitions conditional. Instead of using Ember.Route.transitionTo directly, you want something like:

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

see http://jsfiddle.net/hjdivad/KsHCN/ for an example.




回答2:


Ember's router now has a native mechanism to do this very easily. See docs: http://emberjs.com/guides/routing/preventing-and-retrying-transitions/




回答3:


I'm not sure it's possible since there is (perhaps I missed something) no handler available before exiting from a state. Looking at triggering enter state and enterState() code, it looks like you can't interrupt or cancel the transition between two states.

I think this is explained by Tom Dale in Allow canceling state transitions.

In your case, perhaps you could declare an intermediate state responsible to either redirect to the previous state if the user cancel, or go to the new state if the user accept. I have to say it's easier to write than to implement :(



来源:https://stackoverflow.com/questions/11617701/ember-js-routing-conditionally-prevent-route-state-change

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!