从ember中的控制器获取外部路由实例

时间:2013-10-01 16:17:46

标签: ember.js

我想从控制器在外部路由器中设置一些属性。有没有办法做到这一点? 目前,当我尝试:

AS.AnalyticsIndexController = Ember.Controller.extend({
    needs: ["analyticsRunsIndex"],
    engagements: null,
    exercises: null,
    exerciseRuns: null,
    selectedExercise: null,
    selectedExerciseRun: null,
    selectedEngagement: null,
    actions: {
        goToAnalyticsRuns: function () {
            if (this.get('selectedExerciseRun.id')) {
                this.get('controllers.analyticsRunsIndex').get('target').set('exerciseRunId', this.get('selectedExerciseRun.id'));

            }
        }
    }
.......

“this.get('controllers.analyticsRunsIndex')。get('target')”此时返回主路由器。感谢。

2 个答案:

答案 0 :(得分:0)

我不记得为什么我想以这种方式做事,但似乎没有直接的方式来访问外部路线。我可以做的是通过控制器本身访问外部路由器,如:

AS.AnalyticsRunsIndex = Ember.ObjectController.extend({
    actions:{
        do: function(something){
            this.get('target').set('exerciseRunId', something);
        }
    }
});

在AnalyticsIndexController中:

 actions: {
    goToAnalyticsRuns: function () {
        if (this.get('selectedExerciseRun.id')) {
            this.get('controllers.analyticsRunsIndex').send('do',this.get('selectedExerciseRun.id'));

        }
    }
}

我认为我试图做的事情可能不是“Ember”做事方式。因此,如果其他人试图解决类似问题,可能最好仔细查看是否有更好的做事方式。

答案 1 :(得分:0)

现在在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');
    }
});