Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 储存并返回灰烬路线_Javascript_Ember.js - Fatal编程技术网

Javascript 储存并返回灰烬路线

Javascript 储存并返回灰烬路线,javascript,ember.js,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 wizar

在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(以前的路线)
    给我模型
  • 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.transitiono(previousRoute,previousParams)被调用。并产生以下错误:


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

我认为您的问题没有那么复杂,但归结为
transition()

transiono()
可能是野兽。它的论点是高度动态的。您可以将零传递给无限模型和可选选项散列。模型和选项散列都是对象。所以它需要一种更复杂的方法来决定最后一个参数是模型还是选项散列。为此,它检查对象是否具有
queryParams
属性。您正在传递
{}
,它没有该属性,因此被认为是一个模型


您可以在源代码中找到有关该实现细节的更多信息:

您是否可以使用
transitiono
手动触发到存储路由的转换并查询参数?我找不到正确使用
transitiono
的方法。我更新了问题以反映我的最后一次尝试。