2015-11-06 5 views
0

Я ищу для отображения простого javascript-календаря внутри метеорного ионного шаблона. У меня есть настройка страницы правильно, но когда я пишу в помощнике шаблона: return document.write (buildCal (...)), календарь захватывает страницу, и ни один из других элементов не отображается. Когда я просто код возвращает buildCal (.....), он просто распечатывает все divs, а не html. Может ли кто-нибудь сказать мне, что мне здесь не хватает?Meteor template helper & document.write issue

calendar.js

function buildCal(m, y, cM, cH, cDW, cD, brdr) { 
    var mn = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 
    var dim = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 

    var oD = new Date(y, m - 1, 1); //DD replaced line to fix date bug when current day is 31st 
    oD.od = oD.getDay() + 1; //DD replaced line to fix date bug when current day is 31st 

    var todaydate = new Date() //DD added 
    var scanfortoday = (y == todaydate.getFullYear() && m == todaydate.getMonth() + 1) ? todaydate.getDate() : 0 //DD added 

    dim[1] = (((oD.getFullYear() % 100 != 0) && (oD.getFullYear() % 4 == 0)) || (oD.getFullYear() % 400 == 0)) ? 29 : 28; 
    var t = '<div class="' + cM + '"><table class="' + cM + '" cols="7" cellpadding="0" border="' + brdr + '" cellspacing="0"><tr align="center">'; 
    t += '<td colspan="7" align="center" class="' + cH + '">' + mn[m - 1] + ' - ' + y + '</td></tr><tr align="center">'; 
    for (s = 0; s < 7; s++) t += '<td class="' + cDW + '">' + "SMTWTFS".substr(s, 1) + '</td>'; 
    t += '</tr><tr align="center">'; 
    for (i = 1; i <= 42; i++) { 
     var x = ((i - oD.od >= 0) && (i - oD.od < dim[m - 1])) ? i - oD.od + 1 : '&nbsp;'; 
     if (x == scanfortoday) //DD added 
      x = '<span id="today">' + x + '</span>' //DD added 
     t += '<td class="' + cD + '">' + x + '</td>'; 
     if (((i) % 7 == 0) && (i < 36)) t += '</tr><tr align="center">'; 
    } 
    return t += '</tr></table></div>'; 
} 

Template.calendar.helpers({ 
    currentcalendar: function() { 
     var todaydate = new Date(); 
     var curmonth = todaydate.getMonth() + 1; //get current month (1-12) 
     var curyear = todaydate.getFullYear(); //get current year 
     return document.write(buildCal(curmonth, curyear, "main", "month", "daysofweek", "days", 1)); 
    } 
}); 

calendar.html

<template name="calendar"> 
    {{#contentFor "headerButtonLeft"}} 
    {{>ionNavBackButton path="index"}} 
    {{/contentFor}} 

    {{#contentFor "headerTitle"}} 
    <h1 class="title">Calendar</h1> 
    {{/contentFor}} 

    {{#ionView}} 
    {{#ionContent}} 
     {{currentcalendar}} 
    {{/ionContent}} 
    {{/ionView}} 
</template> 

ответ

0

Просто вернуться buildCal() вместо document.write(buildCal()) - вы почти никогда не используют document.write() в Метеор, шаблоны дают вам динамический контент.

+0

Я сделал это перед публикацией, и html-код будет просто напечатан на экране. т.е. не интерпретируется как HTML. если это имеет смысл. – user3795286

+0

В этом случае либо верните 'safeString', либо используйте тройные фигурные скобки' {{{currentCalendar}}} ' –

+0

Тройные рули! {{{CurrentCalendar}}}. Спасибо Мишелю! – user3795286