【发布时间】:2017-08-29 09:01:33
【问题描述】:
我正在尝试使用反应式引导选择选择器,但我有一个奇怪的行为: 一个事件必须改变 select 的选项,但它只在第一个不工作的事件之后才起作用,因为应用程序没有进入 onRendered 部分......
这是 onRendered 部分:
var renderTimeout = false;
Template.printerselect.onRendered( function(){
if (renderTimeout !== false) {
Meteor.clearTimeout(renderTimeout);
}
renderTimeout = Meteor.setTimeout(function() {
$('#printerName').selectpicker("refresh");
renderTimeout = false;
}, 10);
});
Template.printerSetupForm.onRendered( function(){
$('.selectpicker').selectpicker();
});
这里是模板:
<div class="col-lg-3 col-md-4 col-xs-12 form-group">
<label>COMPANY</label>
<select id="printerCompany" class="form-control selectpicker" name="printer[company]">
<option selected="true" disabled="disabled" value={{company}}>
Please Select A Printer Company
</option>
{{#each Companies}}
<option value="{{company}}" {{printerCompanySelected company}}> {{company}}</option>
{{/each}}
</select>
</div>
<div class="col-lg-3 col-md-4 col-xs-12 form-group">
<label>PRINTER NAME</label>
<select id="printerName" class="form-control selectpicker" name="printer[name]">
<option selected="true" disabled="disabled" value={{name}}>
Please Select A Printer
</option>
{{#each Names}}
<!--<option value="{{name}}" {{printerNameSelected name}}>
{{name}}
</option>-->
{{>printerselect}}
{{/each}}
</select>
</div>
<template name="printerselect">
<option value="{{name}}"> {{name}} </option>
</template>
页面渲染时调用刷新。
然后我更改了更改一些 Session 变量的公司,并响应性地更改名称选择选项,但未调用刷新,因此不会出现在渲染部分。
但是当我再次更改它正在工作的公司时,onRendered 部分被调用。
奇怪的是,即使这没有显示正确的名称,当我选择与公司不匹配的名称时,选择也会选择正确的名称。
抱歉我的英语提前,我已经尽力了。
提前谢谢你!
编辑:名称助手:
Names: () => {
company=Session.get('printer').company;
if(typeof company!='undefined') {
return Printers.find({company: company}).fetch();
} else {
return Printers.find().fetch();
}
}
【问题讨论】:
-
什么是
Names助手? -
@user3374348 我编辑了我的帖子。我正在使用 Session 变量,因此它应该通过响应式刷新
-
据我了解,这应该可行。不过,
.fetch()es 不是必需的。如果您从打印机较少的公司切换到打印机较多的公司,是否可行? -
@user3374348 坦克的建议,我删除了它们。是的,我向公司添加了一些打印机,当我选择公司时,所有打印机都会显示,但是当我选择其他打印机时,会显示正确的打印机......这很奇怪,第一次没有到达 onRendered我选择了一家公司...
-
我不熟悉 selectpicker。每次打印机列表更改时都需要致电
.selectpicker("refresh")吗?.onRendered函数不是由 Meteor 响应式运行的。
标签: meteor meteor-blaze bootstrap-selectpicker