Заполните поле выбора из коллекции и отфильтруйте в соответствии с выбранным значением в метеоре.

Я новичок в Метеоре. У меня есть поле выбора, которое я хочу заполнить из самой коллекции монго. Я пытался сделать это, как показано ниже, но не работает.

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

And also i want to filter the data in mytemplate according to the value selected in the dropdownlist. Please help me iam stuck in this.

это именно то, что у меня есть сейчас, но проблема в том, что раскрывающийся список заполняется на основе результатов всех списков, а не непосредственно из схемы, и повторяет все значения. и я использую один и тот же возвращающий помощник для обоих этих значений, например return company.find(). Помогите пожалуйста мне


person Neo    schedule 05.06.2015    source источник


Ответы (1)


Ну, чтобы заполнить выбор, вы должны изменить {{#each}} вниз на выбор, как это.

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

Потому что, если вы поместите {{#each}} в верхней части тега <select>, метеор создаст 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' )} );
 }
})

Это должно дать вам большую картину, удачи!

person Ethaan    schedule 05.06.2015
comment
Спасибо за ваш ответ. Я сделал то, что вы просили, чтобы заполнить раскрывающийся список. я обновил свой вопрос, указав точный код, который я использую, и уточнил проблему, с которой я столкнулся. пожалуйста, посмотрите и помогите мне - person Neo; 06.06.2015