【问题标题】:Ember-cli addons and helpersEmber-cli 插件和助手
【发布时间】:2015-06-09 06:42:44
【问题描述】:

放置帮助文件的正确方法是什么?对于从插件 ember-cli 项目中找到它们的解析器,它们应该放在哪里?

我正在运行 ember-cli 0.2.2。

我从一个插件项目生成了一个助手:

ember g helper display-helper

生成器将文件放在app/helpers 中,这对我来说似乎是错误的,我原以为它应该放在addon 助手中。我将文件移动到addon/helpers,它看起来像这样:

export default Ember.Handlebars.registerBoundHelper('displayHelper', function displayHelper(searchPath) {
  return new Ember.Handlebars.SafeString(get(this, searchPath));
});

当我运行 ember test 时,我得到以下输出:

✘ 错误:断言失败:无法使用名为“displayHelper”的助手 找到了

让解析器找到此帮助器的唯一方法是添加一个导入,该导入在使用它的组件中引用该帮助器,如下所示:

import displayHelper from '../helpers/display-helper';

这似乎不正确,我原以为解析器会自动找到它?

此外,即使我有参考,以下代码最终也会出现与上述相同的错误消息:

import Ember from 'ember';

var get = Ember.get;

function displayHelper(context, searchPath) {
  return new Ember.Handlebars.SafeString(get(context, searchPath));
}

export default Ember.Handlebars.makeBoundHelper(displayHelper);

所以总结一下,我必须在其模板使用助手的组件中有这一行:

import displayHelper from '../helpers/display-helper';

而且我必须使用 registerBoundHelper 而不是 makeBoundHelper 就像文档说的那样,否则找不到助手。

【问题讨论】:

    标签: ember.js ember-cli


    【解决方案1】:

    如果您将助手从 app/helpers 移动到 addon/helpers,则它在您的应用命名空间中不可用。要解决此问题,请添加以下文件:

    // app/helpers/display-helper.js
    
    import displayHelper from 'your-addon-name/helpers/display-helper";
    export default displayHelper;
    

    (不要从字面上复制 your-addon-name,使用你的插件的名称,这也是你的插件的命名空间。)

    这是基于此处的说明:

    http://www.ember-cli.com/#addon-components

    就像那里的示例组件一样,您可以将真正的帮助程序代码放在 addons/helpers/display-helper 中,但是您需要将其导入并重新导出到您的应用程序中,以便您的解析器找到它。

    【讨论】:

    • 很遗憾我已经尝试过了,没有文件会自动加载到应用程序/文件夹中。 0.2.2 似乎在很多方面都被破坏了。
    • 0.2.3 也有类似的问题。此外,this 和 ember-cli docs 说“建议改用组件”。但我不确定为什么你需要一个组件来在 Ember-CLI 中定义一个助手?作为一个反例,请注意 this repo 的结构,尽管它使用的是早期版本 (0.2.0)。
    • 嗯...我不知道为什么它对你们不起作用,但是您可以尝试在初始化程序中手动注册您的助手,因为只有没有破折号的助手才需要名字。请参阅ember-cli.com/#resolving-handlebars-helpers 的修剪示例
    • 自动加载似乎只适用于在应用程序中生成或放置的助手。我曾尝试使用初始化程序(借鉴this issue 中的示例),但这也不起作用。在您链接到它的段落中再往下一点提到辅助方法不起作用。
    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多