それで、私は Ember の新しいルーターでいくつかの問題を抱えています。特定の動的セグメントの現在のパスを保存して後で戻そうとしているので、URL は次のようになります。
#/inventory/vehicle/1001
その後、分岐することができます
#/inventory/vehicle/1001/details
#/inventory/vehicle/1001/photos
#/inventory/vehicle/1001/description
等々 直前のルートに戻る方法が必要です。Ember ガイドには、このための方法があります。
http://emberjs.com/guides/routing/redirection/
この方法の問題点は、「/choose」ルートを作成して「/」に割り当てると、標準の「/inventory/vehicle/1001」ルートが上書きされることです。たとえば、車へのリンクを次のように作成しようとすると、次のようになります。
{{#linkTo "vehicle" vehicle}}
次に、「車両」ルートが存在しないため、Ember はエラーをスローします。代わりに、次のように設定する必要があります。
{{#linkTo "vehicle.choose" vehicle}}
どちらが機能し、VehicleChooseRoute とすべてをアクティブにします。ただし、「vehicle.choose」は技術的には「vehicle」の子であるため、現在のルートが
#/inventory/vehicle/1001
瞬時に最新のフィルターにリダイレクトされるため、基本的にオンになることはありません。だから基本的に私はこれを回避する方法を見つけようとしています。「vehicle.choose」のパスを標準パス (#/inventory/vehicle/1001/choose) に変更して、「vehicle」ルートを上書きしないようにしてから、VehicleRoute を次のように設定してみました。
Case.Router.map(function() {
this.resource('inventory', function(){
this.route('review');
this.route('sheets');
this.resource('vehicle', { path: '/vehicle/:vehicle_id' }, function(){
this.route('choose');
this.route('details');
this.route('consignor');
this.route('additional');
this.route('price');
this.route('dmv');
this.route('expenses');
this.route('description');
this.route('tasks');
});
});
});
App.VehicleRoute = Ember.Route.extend({
model: function(params) {
return Case.Vehicle.find(params.vehicle_id);
},
setupController: function(controller, model) {
model.set('active', true);
},
redirect: function() {
this.transitionTo('vehicle.choose');
}
})
Case.VehicleChooseRoute = Ember.Route.extend({
redirect: function() {
var lastFilter = this.controllerFor('vehicle').get('lastFilter');
this.transitionTo('vehicle.' + (lastFilter || 'details'));
}
});
しかし、これから発生する問題は (一緒にハッキングされていると感じることは別として)、通常は「車両」によってレンダリングされるテンプレート全体がリダイレクトによって置き換えられるため、サブビューのみを取得することです。したがって、それはオプションではありません。