Meteor-变量更改后重新加载模板节

Meteor-变量更改后重新加载模板节,meteor,meteor-blaze,Meteor,Meteor Blaze,我想在变量更改后刷新/重新加载模板的一部分,以便如果变量为真,它将显示内容a,否则它将显示内容B。我确信这是一个非常简单的问题,但我在找到解决方案时遇到了困难 大概是这样的: Template.x.created = function() { this.variable = false; } Template.x.helpers({ 'getValue': function(){ return this.variable; } });

我想在变量更改后刷新/重新加载模板的一部分,以便如果变量为真,它将显示内容a,否则它将显示内容B。我确信这是一个非常简单的问题,但我在找到解决方案时遇到了困难

大概是这样的:

Template.x.created = function() {
    this.variable = false;
}

Template.x.helpers({
    'getValue': function(){
            return this.variable;
        }
});
模板:

<template name="x"> 
    {{#if getValue}}
     <content A>
    {{else}}
     <content B>
    {{/if}}
</template>

{{{#if getValue}}
{{else}
{{/if}

您需要创建一个反应式数据源,以便在变量更改时让模板帮助器重新运行,因为普通变量在更改值时不会让帮助器知道。最简单的解决方案是使用:

Template.x.onCreated(函数(){
this.variable=新的反应变量(false);
});
Template.x.helpers({
“getValue”:函数(){
//请注意,模板帮助程序中的“this”可能不会引用模板实例
返回Template.instance().variable.get();
}
});

如果您需要访问此模板以外的某个位置的值,您可以将其用作替代的反应式数据源。

@Waiski answer是一个不错的答案,但我想与大家分享我构建的一个简单模板帮助器,因为许多模板都需要它:

使用
registerHelper
可以像这样构建全局帮助器:

Template.registerHelper('get', function (key) {
  let obj = Template.instance()[key]
  return (obj && obj.get) ? obj.get() : obj
})
在每个模板中使用它:

Template.x.onCreated(function() {
  this.foo = new ReactiveVar(true)
  this.bar = new ReactiveVar('abc')
})
Html:

{{#let foo=(get 'foo')}}
  {{#if get 'bar'}}
    Bar is true. Foo: {{foo}}
  {{/if}}
{{/let}}