我正在开发一个 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 : '/'});
});
});
});
});
这真的很好用。我有 URL,例如:/orders
订单列表、/orders/1
一般订单详细信息/orders/1/costs
以及/orders/dimensions
订单的成本和尺寸。
虽然它可以工作,但我还是做了一些额外的工作,因为每个嵌套order
路由都有不同的控制器。我所做的是this.modelFor('order');
在每个嵌套路由的模型钩子中。尽管如此,有时我觉得我需要在路线之间共享一些东西,因为它们都使用相同的模型(Order),它们只是在它的不同部分上工作。
当我想添加“创建订单”功能时,问题开始出现。我希望 URL/orders/new
创建一个新订单并开始编辑它。同样,/orders/new/dimensions
仍然适用。换句话说,唯一改变的是:id
静态new
路径的订单路由参数。我之前开发的模板和控制器可以重复使用,但我找不到任何方法来做到这一点。
也许是因为“订单”是一种资源,而不是一条简单的路线。你会如何解决这个问题?