从助手访问 ReactiveVar // Template.instance()(间接)

Access ReactiveVar // Template.instance() from helper (indirectly)

如何在下面的构造中访问 ReactiveVar

Template.profile.helpers({
    user: {
        ...
        gender: () => Template.instance().genderFlag.get(), //returns Uncaught TypeError: Cannot read property 'genderFlag' of null
        ...
    },
});

Returns error因为gender:里面的Template.instance()null(当我console.log(Template.instance());

这就是我创建 ReactiveVar 的方式:

Template.profile.onCreated( function() {
  this.genderFlag = new ReactiveVar(0);
});

P.S。 genderuser 里面,因为我使用 user 上下文,即 {{#with user}} 在我的 .html.

更新:

空格键部分:

<button type="button" name="Male" class="{{#if gender '1'}}gender--selected{{/if}}">Male</button>
<button type="button" name="Female" class="{{#if gender '2'}}gender--selected{{/if}}">Female</button>

所以我将 arg 传递给 Template.helper gender:

user: {
   ...
   gender: (arg) => arg == Template.instance().genderFlag.get(),
   ...
}

因为您正在帮助器中创建一个函数,所以它似乎选择了错误的数据上下文,因此模板变量在调用时不可用,以下代码有效,它将函数移动到helper 本身,因此上下文是正确的并且它可以正确访问 Template.instance(),然后您可以 return 根据需要为用户 #with

一个对象
Template.profile.helpers({
  user: () => { 
    return { 
        ...
        gender: Template.instance().genderFlag.get() 
        ...
    };
  }
});

编辑:

根据您的问题的更新,有几个选项,但我想说的最简洁的是:

Template.profile.helpers({
  user: () => { 
    var gend = Template.instance().genderFlag.get();
    return { 
        ...
        gender: gend,
        isMale: gend===1?"gender--selected":"",
        isFemale: gend===2?"gender--selected":"",
        ...
    };
  }
});

在你的把手里

<button type="button" name="Male" class="{{isMale}}">Male</button> 
<button type="button" name="Female" class="{{isFemale}}">Female</button>