所以,我在Ember的新路由器上遇到了一些问题。我正在尝试保存并稍后返回给定动态段的当前路径,因此我的网址可能看起来像
#/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”在技术上是“车辆”的孩子,所以#linkTo ONLY在当前路线
时应用了一个活动类#/inventory/vehicle/1001
即时重定向到最新的过滤器,因此它基本上永远不会开启。所以基本上我正在试图找到解决这个问题的方法。我尝试将“vehicle.choose”的路径更改为标准路径(#/ inventory / vehicle / 1001 / choose),因此它不会覆盖“车辆”路线,然后像这样设置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'));
}
});
但是由此产生的问题(除了感觉相当被黑客攻击)是重定向替换通常由“车辆”呈现的整个模板,因此我只获得子视图。所以这不是一个选择。