【问题标题】:Ember CLI + HTMLBars -- Passing Parameters to a HelperEmber CLI + HTMLBars -- 将参数传递给 Helper
【发布时间】:2015-04-22 13:05:40
【问题描述】:

我正在尝试将一个参数从我的 HTMLBars 模板传递给 Helper。

根据文档,我创建了一个助手并明确注册了该助手:

export default Ember.HTMLBars.makeBoundHelper('is-foo', function(value, options) {
   console.log("value: "+value);
});

但我收到一个错误“错误:断言失败:makeBoundHelper 生成的帮助程序不支持与块一起使用”

所以我尝试按照here 的建议使用 Ember.HTMLBars.helper 和 Ember.HTMLBars.registerHelper,但我收到错误“TypeError: Ember.default.HTMLBars.helper is not a function”

如果我没有明确地重新注册助手:

export default function(value, options) {
   console.log("value: "+value);
};

然后我可以传递一个参数,但它没有得到解决并注销我传递的文字。

所以我尝试了here 概述的解决方案,但它似乎不适用于 CLI

我想要的结果是根据我发送给助手的参数值动态选择组件。我的 HTMLBars 代码如下所示:

{{#each foo in model}}
  {{is-foo parameter}}
    {{a-component}}
  {{else}}
    {{another-component}}
  {{/is-foo}}
{{/each}}

我不确定下一步该做什么。任何帮助表示赞赏。

【问题讨论】:

  • 在 CLI 中使用 ember g helper foo。它将为您创建一个 foo 助手。然后你可以查看它的代码,看看如何手动制作。
  • 感谢您的回复!我使用 CLI 生成了一个助手,但它也创建了一个我不能与块一起使用的绑定助手。基本上我需要一种方法来有条件地从我的模板中选择一个组件,但我找不到任何方法让它工作。
  • 请提供您的 HTMLBars 代码。
  • 我已经用 HTMLBars 代码更新了问题。
  • 因为:“我想要的结果是根据我发送给助手的参数值动态选择组件。” How to include a component from a controller in ember 的可能重复项

标签: ember.js ember-cli


【解决方案1】:

在 Ember CLI 项目中做这样的事情,因为助手文件名就是助手名

export default Ember.HTMLBars.makeBoundHelper(function(value, options) {

而不是

export default Ember.HTMLBars.makeBoundHelper('is-foo', function(value, options) {

编辑

根据@TheCompiler 的请求,这里是作为答案的建议。

在 HTMLBars 中做类似的事情

{{if is_parameter}}
  {{a-component}}
{{else}}
  {{another-component}}
{{/if}}

在控制器或组件中计算 parameter 属性

is_parameter: function () {
  var pm = this.get('parameter');

  return (your condition for `pm`)? true : false;
}.property('parameter')

【讨论】:

  • 谢谢,但它仍然给我错误“错误:断言失败:makeBoundHelper 生成的助手不支持使用块”。我只是不明白如何解决这个问题。我想根据参数值从我的模板中动态选择一个组件,但是当我不能使用辅助函数的条件时,我应该怎么做呢?
  • @TheCompiler 您应该将计算属性用作条件,而不是 Helpers。
  • 是的,这就是我最终所做的。如果您想将此建议作为新答案,我会将其标记为已接受。
  • 当传递多个参数时,这些参数以数组的形式给出,因此您可以阅读它们如下export default Ember.HTMLBars.makeBoundHelper(function(parameter, options) {var param1=parameter[0];var param2=parameter[1];console.log("p1:"+param1+" p2:"+param2);});
【解决方案2】:

你想要的行为在this answer中实现。

如果您想知道component 助手是如何实现的,您可以在此处查看其源代码:helpers/component.js(当前为第 63 行)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多