我正在开发一个EmberJS应用程序,我开始重新考虑我的路由器映射。
我的应用程序处理orders
。每个订单都包含details
,costs
和dimensions
。
我希望每个页面都可以寻址。我开始定义这些路线:
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
路径。我之前开发的模板和控制器可以重复使用,但我找不到任何方法。
也许是因为'订单'是资源而不是简单的路线。 你会如何解决这个问题?
答案 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());
}
})