3

我正在开发一个 EmberJS 应用程序,并且开始重新考虑我的路由器映射。我的应用程序处理orders. 每个订单都包含其details,costsdimensions。我希望每一页都是可寻址的。我开始使用定义的这些路线进行开发:

App.Router.map(function() {
    this.route('index', {path : '/'});
    this.route('dashboard');
    this.route('reports');
    this.resource('orders', function() {
        this.route('index', {path : '/'});
        this.resource('order', { path: '/:order_id' }, function(){
          this.route('index', {path : '/'});
          this.route('costs');
          this.route('dimensions');
          this.resource('work', { path: '/works/:work_id' }, function(){
              this.route('index', {path : '/'});
          });
        });
    });
});

这真的很好用。我有 URL,例如:/orders订单列表、/orders/1一般订单详细信息/orders/1/costs以及/orders/dimensions订单的成本和尺寸。

虽然它可以工作,但我还是做了一些额外的工作,因为每个嵌套order路由都有不同的控制器。我所做的是this.modelFor('order');在每个嵌套路由的模型钩子中。尽管如此,有时我觉得我需要在路线之间共享一些东西,因为它们都使用相同的模型(Order),它们只是在它的不同部分上工作。

当我想添加“创建订单”功能时,问题开始出现。我希望 URL/orders/new创建一个新订单并开始编辑它。同样,/orders/new/dimensions仍然适用。换句话说,唯一改变的是:id静态new路径的订单路由参数。我之前开发的模板和控制器可以重复使用,但我找不到任何方法来做到这一点。

也许是因为“订单”是一种资源,而不是一条简单的路线。你会如何解决这个问题?

4

1 回答 1

-1

你能做类似的事情:

App.Router.map(function() {
    this.resource('orders', function() {
        this.route('new', {path : '/orders/new'});
        ...
    });
});

App.OrdersNewRoute = Ember.Route.extend({
  redirect: function() {
    this.transitionTo('order', App.Order.createRecord());
  }
})
于 2013-06-22T21:20:06.893 回答