Ember:从控制器获取路由实例

时间:2013-07-03 22:36:18

标签: ember.js

我有一个多步骤流程,用户可以顺序完成或直接跳转到某个部分(如果两者之间的部分已完成)。我认为这个逻辑应该在Route对象中。但是,从控制器内部,我如何访问路由实例。例如,能够在控制器中执行类似的操作是理想的:

App.Flow = Em.ObjectController.extend({
  submit: function(){
    // Validation and XHR requests
    // ...

    // Go to the next step
    route.goToNextStep();
  }
}

4 个答案:

答案 0 :(得分:39)

在控制器内,您可以通过this.get('target')访问路由器。所以this.get('target').send('goToNextStep')应该有用。

像这样:

App.Flow = Em.ObjectController.extend({
  submit: function(){
    // ...
    this.get('target').send('gotoNextStep');
  }
}

App.FlowRoute = Ember.Route.extend({
  events: {
    gotoNextStep: function(){
      // ...
      this.transitionTo(routeName);
    }
  }
}

答案 1 :(得分:2)

你需要获得这些条件的路线, 所以从控制器说,

App.Flow = Em.ObjectController.extend({
  submit: function(){
    var self =this;
    // Validation and XHR requests
    // ...

    // Go to the next step
    self.send('goToNextStep');
  }
}

并在路线的事件哈希中定义您的goToNextStep事件

答案 2 :(得分:0)

'this'是指向路由器的内容,但您不应该向该原型添加任何方法。相反,制作某种触​​发过渡到下一步的事件。

答案 3 :(得分:0)

除了target之外,在Ember中执行此操作的另一种方法是使用getOwner

例如,将操作发送到您的应用程序路由:

import Component from '@ember/component';
import { action } from '@ember/object'; // https://github.com/pzuraq/ember-decorators-polyfill
import { getOwner } from '@ember/application';

export default class MyTopLevelComponent extends Component {
    @action
    closeModal() {
      getOwner(this).lookup('route:application').send('closeModal');
    }
});