2016-06-01 18 views
0

Anstatt eine neue Vorlage zu laden, gibt es eine Möglichkeit, Meteor zu veranlassen, eine Iteration (mit {{#each}}) eines Arrays in Meteor zu initiieren? Wenn der Benutzer z. B. einen Wert in einem Pulldown-Selektor auswählt, um Meteor dann zu veranlassen, ein Array innerhalb dieser Vorlage zu durchlaufen, um eine andere Mehrfachauswahlliste zu füllen, anstatt eine ganz neue Vorlage mit der neuen Auswahlliste zu laden.Initiieren einer Vorlageniteration in Meteor

Lassen Sie uns sagen, dass dies innerhalb einer Vorlage ist:

. 
. 
. 
<form class="input-field col s6 card-selector"> 
     <select multiple"> 
      <option value="" disabled selected>Select Students</option> 
      {{#each StudentList1}} 
       <option value= '{{FullName}}'>{{formatName FullName}} ({{Level}}) {{RoomWk1}}</option> 
      {{/each}} 
     </select> 
</form> 
. 
. 
. 

Wenn ein Benutzer in dieser Vorlage einen Wert in einem anderen Wähler wählt:

<select class="week-selector"> 
     <option value="" disabled selected>Week</option> 
     <option value="Week1">Week 1</option> 
     <option value="Week2">Week 2</option> 
     <option value="Week3">Week 3</option> 
     <option value="Week4">Week 4</option> 
     <option value="Week5">Week 5</option> 
</select> 

es eine Wiederholung des ersten #each zwingen wird, zu:

<form class="input-field col s6 card-selector"> 
    <select multiple"> 
     <option value="" disabled selected>Select Students</option> 
     {{#each StudentList1}} 
      <option value= '{{FullName}}'>{{formatName FullName}} ({{Level}}) {{RoomWk2}}</option> 
     {{/each}} 
    </select> 
</form> 

Es wäre effizienter als eine neue Vorlage laden, die die gleiche ist, außer für die Multi-Wahl-Werte.

Antwort

1

Sitzungen sind reaktiv und Sie können dies erreichen, indem Sie Sitzungen verwenden (prüfen Sie, ob Sie Sitzungspaket haben).

//we don't want the session value from the previous search/events 
Template.templateName.onRendered(function(){ 
    Session.set('sessionName', undefined); 
}); 

//I'd probably use onDestroyed instead of onRendered 
Template.templateName.onDestroyed(function(){ 
    Session.set('sessionName', undefined); 
}); 

//template events 
'change .week-selector': function(){ 
    var selected = $('.week-selector').find(":selected").text(); 
    Session.set('sessionName', selected) 
} 

//template helper 
StudentList1: function(){ 
    var session = Session.get('sessionName'); 
    if(session !== undefined){ 
     //return some documents using the session value in your find() 
    } else { 
     //return documents without session value 
    } 
} 

EDIT: Ich fand .text() die gewählte Option für den Fall, aber Sie sind frei Wert zurückgeben oder tun, was Sie mit dem gefundenen Wert/Text mögen.