Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS管线重用:编辑并创建新模型_Javascript_Ember.js_Routes - Fatal编程技术网

Javascript EmberJS管线重用:编辑并创建新模型

Javascript EmberJS管线重用:编辑并创建新模型,javascript,ember.js,routes,Javascript,Ember.js,Routes,我正在开发一个EmberJS应用程序,我开始重新思考我的路由器映射。 我的应用程序处理订单。每个订单都包含其详细信息、成本和维度。 我希望每一页都是可寻址的。我开始制定这些路线: App.Router.map(function() { this.route('index', {path : '/'}); this.route('dashboard'); this.route('reports'); this.resource('orders', function(

我正在开发一个EmberJS应用程序,我开始重新思考我的路由器映射。 我的应用程序处理
订单
。每个订单都包含其
详细信息
成本
维度
。 我希望每一页都是可寻址的。我开始制定这些路线:

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
路由都有一个不同的控制器。我所做的是
这个.modelFor('order')。尽管如此,有时我觉得我需要一个在路线之间共享的东西,因为它们都使用相同的模型(顺序),它们只处理不同的部分

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

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

您能做如下操作:

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());
  }
})

我猜您会创建一个不嵌套在您定义的订单资源下的路由,然后将路径设置为/order/new。。。但我不确定,所以我会让其他有经验的ember用户正确回答::-)