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