EmberJS路线重用:编辑和创建新模型

时间:2013-05-22 15:18:26

标签: javascript ember.js routes

我正在开发一个EmberJS应用程序,我开始重新考虑我的路由器映射。 我的应用程序处理orders。每个订单都包含detailscostsdimensions。 我希望每个页面都可以寻址。我开始定义这些路线:

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 : '/'});
          });
        });
    });
});

这工作得非常好。 我有一些网址,例如:/orders用于订单列表,/orders/1用于常规订单详细信息,/orders/1/costs/orders/dimensions用于订单的费用和维度。

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

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

也许是因为'订单'是资源而不是简单的路线。 你会如何解决这个问题?

1 个答案:

答案 0 :(得分:-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());
  }
})