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