如何根据文档(Meteor)中字段的值检查(或不检查)复选框?

How can I check checkboxes (or not) based on the value of a field in a Document (Meteor)?

我需要从 MongoDB 集合中读取值,然后根据文档中与复选框值匹配的字段选中(或不选中)Meteor 模板中的复选框。

先退后一步,我用复选框填充模板,如下所示:

<div id="seljoblocs" name="seljoblocs">
  {{#each jobLocs}}
    <input type="checkbox" value={{jl_jobloc}}><label>{{jl_jobloc}}</label>
  {{/each}}
</div>

...从模板的 "jobLocs" 助手填充值和标签:

jobLocs: function() {
  return JobLocations.find({}, {
    sort: {
      jl_jobloc: 1
    },
    fields: {
      jl_jobloc: 1
    }
  });
}

当 selection 由 "worker" 输入 select 元素组成时,我可以注意到哪个工人被 selected 像这样:

Template.matchWorkersWithJobLocs.events({
    'change #selworker': function(event, template) {
        var workerid = template.find('#selworker').value;
        // TODO: Add code to query Collection and then check the appropriate checkboxes
    },

...这样我就可以选中找到匹配项的复选框("match" 表示该工作人员有资格分配到 job/location)。 IOW,使用返回的文档字段值 (jobloc),我想选中相应的复选框。

我的问题是,我该怎么做?

是否(希望如此!)在以下空格键循环中:

{{#each jobLocs}}
  <input type="checkbox" value={{jl_jobloc}}><label>{{jl_jobloc}}</label>
{{/each}}

...我可以有一个这样的 "isChecked" 帮手:

{{#each jobLocs}}
  <input type="checkbox" value={{jl_jobloc}} {{isChecked}}><label>{{jl_jobloc}}</label>
{{/each}}

...returns 空字符串或字符串 "checked" 取决于此 Meteor 方法是否 returns true:

Template.matchWorkersWithJobLocs.helpers({
    isChecked: function () {
    var workerid = $('#selworker').val;
    if (null == WorkersJobLocsLookup.findOne( {wjllu_workerid: workerid, wjllu_jobloc: jobLocs.jl_jobloc})) {
        return '';
    } else {
        return 'checked';
    }
}

这样,复选框将被选中(因为函数 returns "checked" 选中了复选框)或不被选中,因为函数 returns 是一个空字符串。

IOW,要了解细节,是助手中空格键循环 available/accessible 中的 "jobLocs.jl_jobloc" 字段,这样我就可以查看它是否在 WorkersJobLocsLookup 集合中有相应的文档?

不确定我是否完全确定你在问什么,但你可以使用 this._idthis.someField

如果我没看错的话,可能是这样的:

Template.matchWorkersWithJobLocs.helpers({
  getJobsLocs: function() {
    var job = this.jobLocs.jl_jobloc;
    return WorkersJobLocsLookup.findOne({
      fieldWithJobLoc: job
    });
  }
});

如果您尝试 return 多个结果,请使用 find,而不是 findOne,并且您可能希望将其放在 if (Template.instance().subscriptionsReady()) {} 函数中。