从集合中填充选择字段并根据流星中的选定值进行过滤

时间:2015-06-05 21:40:33

标签: javascript mongodb meteor meteor-autoform meteor-helper

我是Meteor的新人。我有选择框,我想从mongo集合本身填充。我尝试这样做如下,但没有工作

<template name="clist">

<div class="input-field">
 <select>
   <option value="" disabled selected>Choose your option</option>
    {{#each company}}
      <option>{{ccategory}}</option>
    {{/each}}
 </select>
</div>

<ul class="collection" id="listings">
{{#each company}}
 <li>
  {{> employees}}
</li>
{{/each}}

</template>

我还希望根据下拉列表中选择的值过滤mytemplate中的数据。请帮助我,我坚持这个。

这正是我现在所拥有的,但问题是下拉列表是根据不直接来自架构的所有列表的结果填充的,并且是所有值的重复。我正在为这两个值使用相同的返回帮助器,如return company.find()。请帮帮我

1 个答案:

答案 0 :(得分:2)

为了填充选择,您应该将{{#each}}向下更改为选择,就像这样。

<select>
  <option disabled selected>Choose option</option>
{{#each company}}
  <option>{{category}}</option>
{{/each}}
</select>

因为如果您将{{#each}}放在<select>标记的顶部,那么meteor将为每家公司创建1个选择。

公司助手应该像简单的return company.find();

一样简单

现在,如果你想要过滤,有很多选择可以做到这一点,其中一个可能是这个。

我喜欢使用ReactiveDict();,所以我会在这个例子中使用。

安装meteor add reactive-dict

Template.example.onCreated(function(){
 var self = this;

 self.example = new ReactiveDict();

self.example.setDefault( 'valueToFilter' , null);
});

现在处理change等事件,请执行以下操作。

Template.example.events({
 'change select' : function( event, template ) {

   var instance = Template.instance();

   instance.example.set( 'valueToFilter' event.target.value ); //or use $('select').val()  whatever you like to take the value;
  }
})

现在显示结果。

Template.example.helpers({

 showSelectedValues : function(){

  var instance = Template.instance();

  return Companies.find( { name : instance.example.get( 'valueToFilter' )} );
 }
})

这应该给你一个大局,祝你好运!