我需要读取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?
答案 0 :(得分:1)
不确定我是否确切地知道您要问的内容,但您可以使用this._id
或this.someField
在帮助程序中访问当前行/句柄迭代中的项目值
如果我正确地读你,可能就是这样:
Template.matchWorkersWithJobLocs.helpers({
getJobsLocs: function() {
var job = this.jobLocs.jl_jobloc;
return WorkersJobLocsLookup.findOne({
fieldWithJobLoc: job
});
}
});
&#13;
如果您尝试返回多个结果,请使用find
,而不是findOne
,并且您可能希望将其放在if (Template.instance().subscriptionsReady()) {}
函数中。