【问题标题】:Can I pass a helper into a handlebar function?我可以将助手传递给车把功能吗?
【发布时间】:2015-02-14 17:08:29
【问题描述】:

为了避免为标签和文本组合构建相同的 html,我有一个 Handlebar 函数来为我生成 HTML。

例如我有这个

                    {{{labelSpan 'Input Type' inputType}}}
                    {{{labelSpan 'Formula' showFriendlyFormula formula }}}

还有车把功能

UI.registerHelper('labelSpan', function(label, value){
return '<p> <label>' + label + ':</label><br> <span>' + value + '</span></p>';

});

现在 inputType 很好,因为它是上下文的一部分。

然而,showFriendlyFormula 派生自另一个辅助方法,因为本质上我需要为此做一整套额外的事情

    Template.create.helpers({
  showFriendlyFormula: function(formula) {
    return share.convertFormulaToAnotherInputField(formula);
  }
});

显然,调用 {{{labelSpan 'Formula' showFriendlyFormula formula }}} 会失败,所以有没有办法让我传递到 labelSpan,showFriendlyFormula(formula) 的输出

【问题讨论】:

  • 正如 sbking 回答的那样,您不能在空格键中执行此操作,但有一些解决方法。另一个是使用{{#with showFriendlyFormula formula}},在这个块里面this会引用showFriendlyFormula的返回值。

标签: javascript meteor handlebars.js


【解决方案1】:

空格键的表达能力不足以做到这一点(可能是设计使然,因为模板引擎通常不应该实现太多逻辑)。您可以尝试以下方法:

Template.create.helpers({
  friendlyFormula: function() {
    return share.convertFormulaToAnotherInputField(this.formula);
  }
});

{{{labelSpan 'Formula' friendlyFormula}}}

编辑:或者,正如 Peppe L-G 所说,您可以使用 {{#with}} 块更改上下文,然后将该上下文传递给另一个助手:

{{#with showFriendlyFormula formula}}
  {{labelSpan 'Formula' this}} <!-- or {{labelSpan 'Formula' .}} -->
{{/with}}

您也可以将labelSpan 设为块助手而不是内联助手。像这样的:

<template name="labelSpan">
  <p>
    <label>{{this}}</label><br>
    <span>{{Template.contentBlock}}</span>
  </p>
</template>

然后你可以像这样使用:

{{#labelSpan 'Formula'}}
  {{showFriendlyFormula formula}}
{{/labelSpan}}

Here's the full documentation for Spacebars.

【讨论】:

  • 谢谢。我希望将friendlyFormula 转移到全局帮助器中,因为我希望它是通用的,但是是的,这会起作用。
猜你喜欢
  • 2013-08-14
  • 2013-09-25
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2016-06-03
相关资源
最近更新 更多