所以,我对 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 车辆:
{{#linkTo "vehicle" vehicle}}
然后 Ember 会抛出错误,因为“车辆”路线不再存在。相反,它必须设置为:
{{#linkTo "vehicle.choose" vehicle}}
哪个有效,激活 VehicleChooseRoute 和一切。除了,由于“vehicle.choose”在技术上是“vehicle”的子项,#linkTo 只有在当前路线为
#/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'));
}
});
但是由此产生的问题(除了感觉相当黑客之外)是重定向替换了通常由“车辆”呈现的整个模板,所以我只得到子视图。所以这不是一个选择。