使用带参数的助手作为空格键中的助手参数

Using a helper with arguments AS a helper argument in Spacebars

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

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

我遇到的问题是 Spacebars 认为 'getResultInfo' 的参数只是 'formatResult' 的第二个和第三个参数。我真的很想将助手的功能分开(即不必在 'getResultInfo' 和我拥有的所有其他助手的末尾格式化结果)。是否有任何替代语法或方法来实现我想要实现的目标?

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

我看到有两种方法可以解决这个问题:

1) 您可以去掉参数并使用 each 提供的数据上下文。 each 将数据上下文绑定到 this,因此在 getResultInfo 中您可以直接使用 this._id。但是你必须记住,每次使用这个助手时你都需要这个数据上下文。这对不依赖于数据上下文的 'text' 参数造成了问题。

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>

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

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