Emberjs:停止并重试 willTransition 中的转换

Emberjs: stop and retry transitions in willTransition

当用户即将离开当前路线时,我想显示一个警告,让他在离开(并丢失更改)和留在当前路线之间做出选择。

为了捕获所有可能的转换,我需要在路由 willTransition 方法中执行此操作。

我正在尝试 abort() 然后 retry() 如果用户选择转换。但是 retry 似乎没有任何效果。需要注意的是,它是异步调用的。这是一个演示:https://ember-twiddle.com/b6d8ddb665ff79f2988277912916e77b?openFiles=routes.my-route.js%2C

这是我的路线示例路线:

import Ember from 'ember';

export default Ember.Route.extend({
  actions: {
    willTransition(transition) {
      transition.abort();
      Ember.run.later(function(){
        console.log('Transition... now!');
        transition.retry();
      }, 2000);

      return true;
    }
  }
});

日志出现了,但我从未被重定向到 application 路由。

当用户即将离开当前路线时,我想显示一个警告,让他在离开(并丢失更改)和留在当前路线之间做出选择。
对于上述需求,下面的代码就足够了。

willTransition(transition) {
    if (!confirm('Are you sure to navigate ?')) {
        transition.abort();
        return false;
    }
    return true;
}

查看日志。您会看到 "Transition... now!" 每 2 秒出现一次。这表明 willTransition 一次又一次地工作。所以你需要一些标志让你离开。 Updated twiddle