在Spacebars中使用带参数AS的助手作为辅助参数

时间:2015-06-18 06:34:42

标签: meteor spacebars

所以我尝试使用帮助器作为Spacebars中另一个帮助器的参数。在下面的示例中,' getResultInfo'是一个帮助程序,可以获取特定于传递的参数的数据,并且' formatResult'是一个帮助器,它可以格式化其结果和其他助手的结果。

<template name="example">
    {{#each collectionResults}}
        Label: {{formatResult getResultInfo this._id 'text'}}
    {{/each}}
</template>

我遇到的问题是Spacebars认为“getResultInfo&#39;是&#39; formatResult&#39;的第二个和第三个参数。我真的很想让帮助者的功能分开(即,不必在&getffesInfo&#39;以及我拥有的每一个其他助手的末尾格式化结果)。是否有任何替代语法或方法来做我想要实现的目标?

2 个答案:

答案 0 :(得分:1)

我认为你不能像你一样在第二个上链接两个带参数的助手。后续参数仍将被解释为来自第一个助手的参数。

我认为有两种方法可以解决这个问题:

1)您可以摆脱参数并使用each提供的数据上下文。 each将数据上下文绑定到this,因此在getResultInfo中您可以直接使用this._id。但是您必须记住,每次使用此帮助程序时都需要此数据上下文。这会对“文本”造成问题。参数不依赖于数据上下文。

2)你可以创建一个与你的getResultInfo助手相对应的功能,并直接在formatResult助手中使用它,如下所示:

getResultHelper = function(id, text) {
  //do what you want
};

//bind the function to your getResultInfo (example with a global helper)
Template.registerHelper('getResultInfo', getResultHelper);

//use the function in your template helper
Template.example.helpers({
  formatResult: function(format) {
    return getResultHelper(this._id, format);
  }
});

//and finally your template
<template name="example">
  {{#each collectionResults}}
    Label: {{formatResult 'text'}}
  {{/each}}
</template>

答案 1 :(得分:0)

仅供参考,现在可以通过Blaze中的Spacebars子表达式在Meteor 1.2中实现。

<template name="example">
    {{#each collectionResults}}
        Label: {{formatResult (getResultInfo this._id 'text')}}
    {{/each}}
</template>