在meteor / blaze模板中过滤变量

时间:2015-07-01 13:22:51

标签: templates meteor meteor-blaze

假设我有一个Meteor模板,我想在其他Meteor模板中使用。

arr

假设我想从另一个模板helpsout调用这个帮助器,它获取一个字符串arr数组作为帮助器,我想在{的每个元素上调用<template name="needshelp"> {{#each arr}} {{> helpsout text="this needs help: {{this}}"}} {{/each}} </template> 模板{1}}但是首先要修改它,先说&#34;这需要帮助:&#34;。我想写这样的东西:

{{this}}

text未进行插值,最终将"this needs help: {{this}}"设置为文字helpsout

有没有办法在不将needshelp的内容直接复制到helpsout的情况下执行此操作? (您可以想象$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test $ sudo apt-get update $ sudo apt-get install gcc-4.9 实际上是一个由其他几个模板使用的复杂模板,因此我们不希望将其复制到正在使用的每个地方。)似乎有子表达式可以做到,但AFAIK目前在Meteor中不支持。

1 个答案:

答案 0 :(得分:1)

您有两种选择:

前缀很常见

如果你的应用中的常见模式是应该使用某种正文和一些前缀文本调用helpsout,我会修改helpsout的上下文,以便它需要body 1}}和一个可选的prefix,如此:

<template name="needshelp">
  {{#each arr}}
    {{> helpsout prefix="this needs help: " body=this}}
  {{/each}}
</template>
Template.helpsout.helpers({
  text: function() {
    return (this.prefix || '') + this.body;
  }
});

前缀不常见

如果您希望保持代码不变而不更改helpsout,那么您可以在needshelp模板中使用其他帮助来设置上下文:

<template name="needshelp">
  {{#each arr}}
    {{> helpsout text=helpText}}
  {{/each}}
</template>
Template.needshelp.helpers({
  helpText: function() {
    return "this needs help: " + this;
  }
});