如何使用Ember的V2路由器保存路径并返回到它

时间:2013-02-04 00:09:38

标签: ember.js ember-router

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

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

0 个答案:

没有答案