命名空间路由是否需要目录结构?

克里斯蒂安·法齐尼

我创建了namespaced一条名为路线checkout

我有以下内容router.js

// router.js
this.route('checkout', function() {
  this.resource('payments', function() {
  });
});

可以通过以下途径访问以下路线:

http://localhost/checkout/payments

但是,paymentcheckout目录中没有控制器,模板,的路由我会想到:

app/controllers/checkout/payments/index.js
app/routes/checkout/payments/index.js
app/templates/checkout/payments/index.hbs

但是相反,它们存在并且可以由Ember在以下位置进行访问:

app/controllers/payments/index.js
app/routes/payments/index.js
app/templates/payments/index.hbs

这是预期的吗?

生活

之所以能够正常工作,部分原因在于Asgaroth的描述:资源重置了名称空间,因此在您的示例中ember-cli正在寻找一个类,Payments而不是CheckoutPayments,部分原因是ember-cli支持两种目录布局(常规的目录布局和“荚”布局)。在构建应用程序时,它从文件目录中获取类的名称,这取决于最合适的类。

您基本上是将两种方法混合并匹配到文件系统布局,这就是为什么它可以工作的原因。但是,如果没有更好的结构,很难弄清什么属于什么。

相反,我将ember generate --pod ...它们结构一起使用(应该在Ember 2.0中推荐),这将导致文件结构与您的问题类似:

app/map
├── debug
│   ├── controller.js
│   ├── route.js
│   └── template.hbs
├── index
│   ├── controller.js
│   └── template.hbs
├── settings
│   ├── controller.js
│   └── template.hbs
├── systems
│   ├── system
│   │   ├── route.js
│   │   └── template.hbs
│   ├── controller.js
│   ├── route.js
│   └── template.hbs
├── controller.js
└── template.hbs

是的,您可以嵌套路由(从Ember 1.7开始),并且使用ES6模块,通过路由使用资源几乎没有好处。我已经停止使用它们了,因为根据我router.js现在上面的结构,这是一个微不足道的事情

this.route( 'map', function() {
  this.route( 'systems', function() {
    this.route( 'system', { path: ':system_id' } );
  });
  this.route( 'settings' );
  this.route( 'debug' );
});

我强烈建议您为路由器,控制器,mixin和组件使用Pod结构。虽然这需要一些时间来适应,但您的编辑器必须显示目录名称才能知道您正在编辑什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章