我可以将助手传递到车把功能吗?

时间:2015-02-14 07:09:23

标签: javascript meteor handlebars.js

为了防止为标签和文本组合构建相同的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(公式)的输出

1 个答案:

答案 0 :(得分:1)

Spacebars的表现力不足以做到这一点(可能是设计,因为模板引擎通常不应该实现太多的逻辑)。你可以尝试类似的东西:

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.