当我在Ember Addon项目(比如addon-project
)中运行ember g component foo-bar
时,它会生成以下内容:
// addon-project/addon/components/foo-bar.js
import Ember from 'ember';
import layout from '../templates/components/foo-bar';
export default Ember.Component.extend({
layout
}
// addon-project/addon/templates/components/foo-bar.hbs
{{yield}}
// addon-project/app/components/foo-bar.js
export { default } from 'addon-project/components/foo-bar';
我注意到它不会生成addon-project/app/templates/components/foo-bar.js
来导出组件模板,而是使用layout
显式链接模板。
为什么不生成addon-project/app/templates/components/foo-bar.js
?这种行为有原因吗?
此外,为什么使用相对路径而不是绝对路径导入layout
(即import layout from 'addon-project/templates/components/foo-bar
?
First-您使用哪个版本的ember-cli
?蓝图取决于版本
对我来说,它做下一个
vvs ~/r/e/test-addon> ember -v
ember-cli: 2.6.3
node: 4.4.7
os: darwin x64
vvs ~/r/e/test-addon> ember g component test-component
Could not start watchman; falling back to NodeWatcher for file system events.
Visit http://ember-cli.com/user-guide/#watchman for more info.
installing component
create addon/components/test-component.js
create addon/templates/components/test-component.hbs
installing component-test
create tests/integration/components/test-component-test.js
installing component-addon
create app/components/test-component.js
因此它生成模板以及
接下来,它使用导入布局的相关路径来减少依赖于插件名称空间(在index.js
中定义)的位置数量,因此,如果您将来更改该名称空间,您应该只更新显式映射到应用程序的文件。
哦。在组件使用的布局中,它没有生成模板桥接。它允许您在不定义模板的情况下扩展组件(您可以只扩展原始组件,添加/更改逻辑并跳过创建模板)。如果您要使用模板而不是布局,您应该手动定义模板(或显式使用相同的布局)