在Meteor中启动模板迭代

时间:2016-06-01 19:33:27

标签: meteor

有没有办法强制Meteor在Meteor中启动数组的迭代(使用{{#each}}),而不是加载新模板?例如,如果用户选择下拉选择器中的值,则启动Meteor以遍历该模板中的数组以填充另一个多选择器列表,而不是使用新的选择器列表加载整个新模板。

让我们说这是在模板中:

<script>
 if ($(window).width() > 768) {
$(window).scroll(function () {
    if ($(window).scrollTop() + $(window).height() > ($(document).height() - 250)) {
        $("#up-btn").fadeIn(500);
    } else {
        $("#up-btn").fadeOut(500);
    }
   });
 };
</script>

当用户在该模板中的其他选择器中选择一个值时:

<a id="up-btn" href="javascript:void(0);" onclick="scrolltop();"><i class="fa fa-chevron-up fa-lg"></i></a>

它会强制重复第一个#each:

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

除了多选择器值之外,加载一个相同的新模板会更有效。

1 个答案:

答案 0 :(得分:1)

会话是被动的,你可以通过使用会话来实现这一点(检查你是否有会话包)。

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

编辑:我在事件中找到了所选选项的.text(),但您可以随意返回值或使用找到的值/文本执行任何操作。