如何让空格键 {{if}} 中的 HTML 响应会话变量进行更改?

How do I get HTML inside Spacebars {{if}} to change reactively with a Session variable?

在我的 Meteor 项目中,我希望根据 Session 变量显示模板部分;但是,{{#if}} 中的 HTML 没有反应性出现。
如何让 {{#if}}{{/if}} 响应地更改会话变量?

HTML:

<head>
  <title>testApp</title>
</head>
<body>
  {{> testTemplate}}
</body>

<template name="testTemplate">
  {{#if isDisplayed}}
    <div>It's working!</div>
  {{/if}}
  <button id="testButton">Toggle Display</button>
</template>

JavaScript:

Session.setDefault("displayVar", false);

Template.testTemplate.helpers({
    isDisplayed: Session.get("displayVar")
});

Template.testTemplate.events({
    "click #testButton": function () {
        if (Session.get("displayVar")) {
            Session.set("displayVar", false);
        } else {
            Session.set("displayVar", true);
        };
    }
});

正在为助手赋值:

isDisplayed : Session.get('displayVar')

等同于:

isDisplayed: false // or true, or whatever 'displayVar' is when run

要解决这个问题,只需使用一个函数(这里是 ES6 Arrow function,因为 Meteor 使用 Babel):

isDisplayed: () => Session.get('displayVar')

使用函数确保生成 Tracker 计算。

您的助手需要 return 来自匿名函数的值:

Template.testTemplate.helpers({
  isDisplayed: function(){
    return Session.get("displayVar");
  }
});