1

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

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')”此时返回主路由器。谢谢。

4

2 回答 2

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”的做事方式。因此,如果其他人正在尝试解决类似的问题,最好仔细研究一下,看看是否有更好的做事方式。

于 2013-12-11T22:12:40.753 回答
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');
    }
});
于 2019-04-24T04:20:53.267 回答