【问题标题】:Why doesn't ember cli generate app bridge for hbs file when generating component from addon?为什么从插件生成组件时,ember cli 不为 hbs 文件生成应用程序桥?
【发布时间】:2016-07-27 18:10:36
【问题描述】:

当我在 Ember Addon 项目中运行 ember g component foo-bar(比如说 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

【问题讨论】:

    标签: ember.js ember-cli ember-cli-addons


    【解决方案1】:

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

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

    【讨论】:

    • 我测试了 2.4.3 和 2.7.0。实际上它也没有为您生成模板的桥文件。它生成组件、模板、组件测试和组件桥,但不生成模板桥。我想知道为什么它没有在您的情况下生成 test-addon/app/templates/components/test-component.js 文件
    • re:不依赖于插件命名空间......这个逻辑对我来说没有意义。 1)你为什么要改变你的插件命名空间?这似乎不是你愿意或不应该做的事情。即使你必须这样做,你也可以“查找并替换所有”。 2)使用相对路径是脆弱的。如果你有多层组织,你最终会得到“../../../../”。如果你移动你的文件,你必须确保你有正确数量的 ../ 3) 这是我见过 EmberCLI 使用相对路径的唯一地方。甚至 Ember Data 在内部使用“ember-data”命名空间,而不是相对路径。
    • 哦。它没有在组件使用的布局中生成模板桥原因。它允许您在不定义模板的情况下扩展组件(您可以扩展原始组件,添加/更改逻辑并跳过为其创建模板)如果您将使用模板而不是布局 - 您应该手动定义模板(或显式使用相同的布局)
    • 好的..我想这更有意义......但这打破了模式。 Ember 一直使用匹配名称来匹配 .js.hbs 文件。使用layout 覆盖模板是一种自定义行为(layout 甚至没有在组件 API 文档中列出)。如果这是推理,那么默认支持自定义行为是很奇怪的。并且仅适用于插件,因为这不是为应用程序生成的组件的情况
    • 它确实emberjs.com/api/classes/Ember.Component.html#property_layout 想法是,对于插件情况,您更频繁地更改逻辑,而不是模板。这取决于 ember-cli 的版本。在旧版本中,它使用模板
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    相关资源
    最近更新 更多