3

所以,我对 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'));
  }
});

但是由此产生的问题(除了感觉相当黑客之外)是重定向替换了通常由“车辆”呈现的整个模板,所以我只得到子视图。所以这不是一个选择。

4

0 回答 0