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

时间:2015-09-30 21:00:13

标签: jquery mongodb checkbox meteor meteor-helper

我需要读取MongoDB Collection中的值,然后根据Document中与复选框值匹配的字段检查(或不检查)Meteor Template中的复选框。

要先退一步,我会使用如下复选框填充模板:

<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
    }
  });
}

当从“worker”输入选择元素进行选择时,我可以注意选择了哪个工作者:

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
    },

...以便我可以查看找到匹配项的复选框(“匹配”表示工作人员有资格被分配到作业/位置)。 IOW,使用返回的Document字段值(jobloc),我想检查相应的复选框。

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

在以下SpaceBars循环中是否就是这种情况(希望如此!)

{{#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}}

...根据此Meteor方法是否返回true返回空字符串或字符串“checked”:

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';
    }
}

这样,复选框将被选中(因为该函数返回“checked”,它会检查复选框)或不复制,因为该函数返回一个空字符串。

IOW,为了获得细节,是帮助器中可用/可访问的Spacebars循环中的“jobLocs.jl_jobloc”字段,以便我可以看到它是否在WorkersJobLocsLookup集合中有相应的Document?

1 个答案:

答案 0 :(得分:1)

不确定我是否确切地知道您要问的内容,但您可以使用this._idthis.someField在帮助程序中访问当前行/句柄迭代中的项目值

如果我正确地读你,可能就是这样:

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

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