0

我正在尝试使用反应式引导选择选择器,但我有一个奇怪的行为:一个事件必须更改选择的选项,但它仅在第一个不工作的事件之后才起作用,因为应用程序没有进入 onRendered 部分…</p>

这是 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>

渲染页面时调用刷新。

然后我更改了更改一些会话变量的公司,并响应性地更改名称选择选项,但不调用刷新,因此不会出现在渲染部分。

但是当我再次更改它正在工作的公司时,该onRendered部分被调用。

奇怪的是,即使这没有显示正确的名称,当我选择与公司不匹配的名称时,选择也会选择正确的名称。

对不起我的英语提前,我尽力了。

提前谢谢你!

编辑:名称助手:

Names: () => {
  company=Session.get('printer').company;
  if(typeof company!='undefined') {
    return Printers.find({company: company}).fetch();
  } else {
    return Printers.find().fetch();
  }
}
4

1 回答 1

0

我将会话变量“打印机”设置为空字段。当我选择一家公司时,它现在可以工作但没有公司,我没有得到任何打印机,因为我不必用“未定义”但有空字段来测试公司。

所以我改用空字段进行测试,它不再工作了......

太奇怪了,测试可以取消 onRendered,这一定是 Mongo 的问题。

我会继续搜索它。

于 2017-08-30T10:13:09.600 回答