Javascript 当元素的值发生变化时,从元素中读取值的Meteor助手是否会自动重新执行?
我需要首先用值填充一组select元素,如下所示:Javascript 当元素的值发生变化时,从元素中读取值的Meteor助手是否会自动重新执行?,javascript,jquery,mongodb,meteor,meteor-helper,Javascript,Jquery,Mongodb,Meteor,Meteor Helper,我需要首先用值填充一组select元素,如下所示: <select class="jobLoc" id="date1Shift1JobLoc1" name="date1Shift1JobLoc1"> {{#each jobLocations}} <option value={{jl_jobloc}}>{{jl_jobloc}}</option> {{/each}} </select> 首次呈现模板时,date1Shift1JobL
<select class="jobLoc" id="date1Shift1JobLoc1" name="date1Shift1JobLoc1">
{{#each jobLocations}}
<option value={{jl_jobloc}}>{{jl_jobloc}}</option>
{{/each}}
</select>
首次呈现模板时,date1Shift1JobLoc1Count选择元素将填充所有Jobloc;但是,如果选择了工作者,则应清除Date1Shift 1Jobloc1Count中的选项,然后用适当的子集替换
问题是,由于Meteor看到助手依赖于worker select元素的值,这会自动工作吗?我希望如此……但我希望的太多了。如果我的怀疑是有根据的,我如何让助手重新运行,让模板重新渲染?我是否需要从模板事件处理程序执行此操作,类似以下内容:
Template.tblScheduler.events({
"change #worker": function (event) {
// Is it possible to call the jobLocations helper from here?
}
});
Template.tblScheduler.helpers({
jobLocations: function() {
workerDep.depend(); // <-----------
var worker = $('#worker').val;
if (worker == '') {
// ...
??或者我必须从那里手动执行,比如伪代码:
Template.tblScheduler.helpers({
jobLocations: function() {
var worker = $('#worker').val;
if (worker == '') {
return JobLocations.find(); // return all
} else {
return JobLocations.find({ jl_workerid: worker }); // a worker was selected; use it to return a subset
}
}
});
Template.tblScheduler.events({
"change #worker": function (event) {
var worker = $('#worker').val;
var arrayOfDocs = Meteor.call('getJobLocsForWorker(worker))');
// assign the values in arrayOfDocs to the "date1Shift1JobLoc1" select element
}
});
或者还有其他方法吗?jQuery元素是非反应性数据源,由于依赖于它,我认为最好的方法是将此值包装在一个:
您可能希望更改事件处理,这样用户就不会看到整个UI在她键入的每个字母时闪烁和更新。jQuery元素是非反应性数据源,因此我相信您最好将此值包装在一个:
您可能希望更改事件处理,以便用户不会在她键入的每个字母时看到整个UI闪烁和更新。一种可能的解决方案是明确声明助手依赖于您的工作选择器。您可以使用依赖项对象来实现这一点 然后,使用此对象标记辅助对象,如下所示:
Template.tblScheduler.events({
"change #worker": function (event) {
// Is it possible to call the jobLocations helper from here?
}
});
Template.tblScheduler.helpers({
jobLocations: function() {
workerDep.depend(); // <-----------
var worker = $('#worker').val;
if (worker == '') {
// ...
要触发显式依赖项,请使用:
Template.tblScheduler.events({
"change #worker": function (event) {
workerDep.changed(); // <-----------
一种可能的解决方案是显式声明助手依赖于工作选择器。您可以使用依赖项对象来实现这一点 然后,使用此对象标记辅助对象,如下所示:
Template.tblScheduler.events({
"change #worker": function (event) {
// Is it possible to call the jobLocations helper from here?
}
});
Template.tblScheduler.helpers({
jobLocations: function() {
workerDep.depend(); // <-----------
var worker = $('#worker').val;
if (worker == '') {
// ...
要触发显式依赖项,请使用:
Template.tblScheduler.events({
"change #worker": function (event) {
workerDep.changed(); // <-----------
请注意,在代码中使用==将匹配任何虚假值,包括0、null或未定义。请注意,在代码中使用==将匹配任何虚假值,包括0、null或未定义。当两个答案相同时,除了使用不同的API=p@KyllLOL:不过我不知道反应性VAR,谢谢你的提示!当两个答案相同时,除了使用不同的API=p@KyllLOL:不过我不知道反应性VAR,谢谢你的提示!worker的定义应该放在哪里?在引用它的.js文件的顶部?有多个选项。可以将其放在模板实例的数据中,也可以像这里一样放在上面的范围中。worker的定义应该放在哪里?在引用它的.js文件的顶部?您有多个选项。可以将其放在模板实例的数据中,也可以像这里一样放在上面的范围中。