我创建了namespaced
一条名为的路线checkout
。
我有以下内容router.js
。
// router.js
this.route('checkout', function() {
this.resource('payments', function() {
});
});
可以通过以下途径访问以下路线:
http://localhost/checkout/payments
但是,payment
该checkout
目录中没有控制器,模板,的路由。我会想到:
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] 删除。
我来说两句