2017-07-03 103 views
0

我有一個幫助器,它應該找到與給定的月份和年份參數相對應的所有事件,並將它們作爲模板的數組返回以進行循環。看來我的幫手只是回到了第一年的實例,而不是循環,我不明白爲什麼。Blaze模板助手僅在Spacebars中返回Meteor/Mongo中的每個循環

這裏是模板:

<template name="list"> 
    <ul id="ulShell"> 
    {{#each year in getYears}} 
     <li class="liYear"> 
     <h2>{{year}}</h2> 
     </li> 
     <ul class="ulSubShell"> 
     {{#each month in (getMonths year)}} 
      <li class="liMonth"> 
      <h3>{{month}}</h3> 
      </li> 
      <ul> 
      {{#each event in (getEvents month year)}} 
       <li> 
       <h4>{{dayOfWeek event.start}} – {{formatDate event.start}}</h4> 
       <div class="divEvent">{{event.title}} <span class="spanDep pull-right">{{event.department}}</span></div> 
       </li> 
      {{/each}} 
      </ul> 
     {{/each}} 
     </ul> 
    {{/each}} 
    </ul> 
    </template> 

和這裏的邏輯:

let monthNames = ["January", "February", "March", "April", "May", "June", 
    "July", "August", "September", "October", "November", "December" 
    ]; 

    let today = new Date(); 
    //today.setDate(today.getDate()); 

    let upcoming = { 
    start: { 
     $gt: today.toISOString() 
    } 
    } 

    let findYears = function(){ 
    var selectedDep = Session.get('selectedDep'); 
    var distinctYears = _.uniq(Events.find({ $and: [ upcoming, selectedDep ] }, { 
     sort: {start: 1}, fields: {start: true} 
    }).fetch().map(function(x) { 
     var d = Number(x.start.substring(0, 4)); 
     return d; 
    }), true); 
    return distinctYears; 
    }; 

    let findMonths = function(year){ 
    var selectedDep = Session.get('selectedDep'); 
    var query = { 
     start: { 
     $gt: new Date(year - 1, 11, 31, 21, 59, 59, 999).toISOString(), 
     $lt: new Date(year + 1, 0, 0, 22, 00, 00, 001).toISOString() 
     } 
    } 
    var distinctMonths = _.uniq(Events.find({ $and: [ upcoming, query, selectedDep ] }, { 
     sort: {start: 1}, fields: {start: true} 
    }).fetch().map(function(x) { 
     var d = Number(x.start.substring(5, 7)); 
     return monthNames[d];  
    }), true); 
    return distinctMonths; 
    }; 

    /////////// I think this is where the problem is. Maybe with the forEach() function? 
    let findEvents = function(month, year){ 
    var selectedDep = Session.get('selectedDep'); 
    var events = Events.find({ $and: [ upcoming, selectedDep ] }, {sort: {start: 1}}).fetch(); 
    var finalEvents = new Array(); 
    events.forEach(function(event){ 
     var mDigits = monthNames.indexOf(month); 
     mDigits += 1 
     mDigits = mDigits.toString(); 
     var yearMonthSlice; 
     if(mDigits.length === 1){ 
     yearMonthSlice = year+"-"+"0"+mDigits; 
     }else if(mDigits.length === 2){ 
     yearMonthSlice = year+"-"+mDigits; 
     } 
     var getStart = event.start.substring(0, 7); 
     if(yearMonthSlice === getStart){ 
     finalEvents.push(event); 
     } 
    }); 
    return finalEvents; 
    }; 

    Template.list.onCreated(() => { 
    let template = Template.instance(); 
    template.subscribe('events'); 
    }); 

    Template.list.helpers({ 
    getYears() { 
     foundYears = findYears(); 
     return foundYears; 
    }, 
    getMonths(year) { 
     foundMonthNames = findMonths(year); 
     return foundMonthNames; 
    }, 
    getEvents(month, year) { 
     var foundEvents = findEvents(month, year); 
     return foundEvents; 
    }, 
    formatDate(start) { 
     var dayNumber = start.substring(8, 10); 
     return dayNumber; 
    }, 
    dayOfWeek(start) { 
     var days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; 
     var x = Number(new Date(start).getDay()); 
     var dayName = days[x]; 
     return dayName; 
    } 
    }); 

列表在我的瀏覽器撕心裂肺這樣的:

Screen shot of list

任何幫助將是非常感謝。我是新手,特別是Blaze/Spacebars/Meteor/MongoDB