0

当我ember g component foo-bar在 Ember Addon 项目中运行时(比如说addon-project),它会生成以下内容:

// 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

4

1 回答 1

0

首先-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-因此,如果您将来更改该命名空间-您应该只更新显式映射到应用程序的文件)

哦。它没有在组件使用的布局中生成模板桥原因。它允许您在不定义模板的情况下扩展组件(您可以扩展原始组件,添加/更改逻辑并跳过为其创建模板)如果您将使用模板而不是布局 - 您应该手动定义模板(或显式使用相同的布局)

于 2016-07-27T23:24:39.427 回答