储存并返回Ember路线

时间:2018-09-13 08:36:22

标签: javascript ember.js

在Ember应用程序上,我正在实现一个向导。它由几个步骤组成(每个步骤都有自己的路线)。

我想存储用户启动向导的路径(包括其模型和查询参数,如果有的话)。 在向导的最后,我想将用户重定向到初始路由。

例如:

/myapp/some/route   --> click on a link to start the wizard
/myapp/wizard/step1
/myapp/wizard/step2
/myapp/wizard/step3 --> click to end the wizard
/myapp/some/route   --> the initial page

我该怎么做?

在向导步骤1的beforeModel(transition)中,我发现:

  • this.get('router.currentRouteName')给我上一条路线的名称
  • this.modelFor(previousRoute)给我模型
  • this.paramsFor(previousRoute)给我这些参数

但是,我找不到如何向后重放过渡,或者如何重新创建过渡以返回到初始路线。


编辑:为问题添加更多上下文

我的路由器配置:

Router.map(function () {
  ...    
  this.route('inbox', {
      path: '/inbox'
    },
    function () {
      this.route('msg', {path: '/msg'});
      this.route('encaissements', {path: '/encaissements'});
    }
  );
  ...

在wizard-route.js中

  beforeModel(transition) {
    this._super(...arguments);

    let previousRoute = this.get('router.currentRouteName');
    if (previousRoute && previousRoute !== 'loading') {
      // store the previous route in the router
      this.set('router.previousRoute', previousRoute);
      this.set('router.previousModel', this.modelFor(previousRoute));
      this.set('router.previousParams', this.paramsFor(previousRoute));
    }
  }
  actions: {
    redirectToPreviousOrDefault(defaultRoute) {
      let previousRoute = this.get('router.previousRoute');
      if (previousRoute) {
        // a previous route exist, redirect !
        let previousModel = this.get('router.previousModel');
        let previousParams = this.get('router.previousParams');

        if (previousModel) {
          if (previousParams) {
            this.transitionTo(previousRoute, previousModel, previousParams);
          } else {
            this.transitionTo(previousRoute, previousModel);
          }
        } else if (previousParams) {
          this.transitionTo(previousRoute, previousParams);
        } else {
          this.transitionTo(previousRoute);
        }
      }
    }
  }

在向导结束时,我将动作称为redirectToPreviousOrDefault

this.get('router.previousRoute') --> inbox.msg
this.get('router.previousModel') --> undefined
this.get('router.previousParams') --> {}

因此,在这种情况下,将调用行this.transitionTo(previousRoute, previousParams);。并产生此错误:

未捕获的错误:传递的上下文对象多于路由的动态段:inbox.msg

0 个答案:

没有答案