0

ルーターを次のように設定しています:

this.resource('analytics', {path: '/analytics'}, function(){
    this.resource('analyticsRuns', {path: ':exerciseRunId/analyticsRuns'},function(){
        this.resource('analyticsRun',{path: ':runId'});
    });
});

次を使用して「analyticsRuns」ルートにジャンプします。

this.transitionToRoute('analyticsRuns',{"exerciseRunId":this.get('selectedExerciseRun.id')});

私の AnalyticsRunsIndexRoute は次のように定義されています。

AS.AnalyticsRunsIndexRoute = Ember.Route.extend({
model : function(params) {
    var store = this.get('store');
     //console.log(params); //returns empty object
    //var exerciseRunId = AS.Analytics.get('exerciseRunId');
    exerciseRunId = 577;
    if(!(exerciseRunId)){
        this.transitionTo('analytics');
    }

    store.find('analyticsRun',{'exerciseRunId':exerciseRunId});
    return store.filter('analyticsRun', function(analyticRun){
        return analyticRun.get('exerciseRunId') == exerciseRunId;
    });


},
setupController : function(controller,model){
    this._super(controller,model);
    this.controllerFor('analysisTemplates').set('model',controller.get('store').find('analysisTemplate'));
}

});

AnalyticsRunsIndexRoute の「:exerciseRunId」値にアクセスできるかどうか疑問に思っていました。現在、このルートのモデルに渡された params 引数を確認すると、何も設定されていません。ただし、更新すると、パラメーターは AnalyticsRunRoute で使用できるようになりますが、更新時にのみ使用できます。パラメータ値を取得するには、stateManagement をいじる必要がありますか? またはそれにアクセスする簡単な方法があります。ありがとう。

解決 :

これについて説明してくれた Jeremy に感謝します。これが私が今設定した方法です:

私は次のようなルートを無視しました:

AS.AnalyticsRunsRoute = Ember.Route.extend({
model : function(params) {
    return params;
}
});


AS.AnalyticsRunsIndexRoute = Ember.Route.extend({
model : function(params) {
    var parentModel = this.modelFor('analyticsRuns');
    var exerciseRunId = AS.Analytics.get('exerciseRunId')||parentModel.exerciseRunId;
    var store = this.get('store');

    if(!(exerciseRunId)){
        this.transitionTo('analytics');
    }

    store.find('analyticsRun',{'exerciseRunId':exerciseRunId});
    return store.filter('analyticsRun', function(analyticRun){
        return analyticRun.get('exerciseRunId') == exerciseRunId;
    });

},
setupController : function(controller,model){
    this._super(controller,model);
    this.controllerFor('analysisTemplates').set('model',controller.get('store').find('analysisTemplate'));
}
});
4

1 に答える 1

0

呼び出すtransitionToRouteときは、ライブ オブジェクトを渡す必要があります。

this.transitionToRoute('analyticsRuns',this.get('selectedExerciseRun'));

ルートからルートに遷移する場合、フックはスキップされるため、ライブ オブジェクトを内またmodelは 内で渡すことが重要です。transitionToRoutelink-to

[更新] コメントへの応答:

がライブ オブジェクトでない場合selectedExcerciseRunは、遷移する前にライブ オブジェクトをインスタンス化する必要があります。このようなもの :

var runId = this.get('selectedExerciseRun.id');
var promise = store.find('analyticsRun',{'exerciseRunId':runId});
promise.then(function(analyticsRun){
  this.transitionToRoute('analyticsRun',analyticsRun);
});
于 2013-09-26T05:41:56.607 に答える