以编程方式(非声明方式)呈现Meteor模板

以编程方式(非声明方式)呈现Meteor模板,meteor,fullcalendar,Meteor,Fullcalendar,我正在尝试使用eventRender自定义添加到FullCalendar的事件。我知道我可以直接从eventRender方法返回HTML,但我更喜欢通过编程将事件数据与预定义的Meteor模板(与相关事件)合并 以前我本可以使用Meteor.render(),但该功能不再可用。我熟悉Template.dynamic,但它似乎只以声明方式提供,而且我在这里看到的大多数问题都很老,所以请参考不推荐使用的功能 以下是我想做的: 日历-事件填充和呈现: Template.dashboard.render

我正在尝试使用
eventRender
自定义添加到FullCalendar的事件。我知道我可以直接从
eventRender
方法返回HTML,但我更喜欢通过编程将事件数据与预定义的Meteor模板(与相关事件)合并

以前我本可以使用Meteor.render(),但该功能不再可用。我熟悉
Template.dynamic
,但它似乎只以声明方式提供,而且我在这里看到的大多数问题都很老,所以请参考不推荐使用的功能

以下是我想做的:

日历-事件填充和呈现:

Template.dashboard.rendered = function(){
  $('#calendar').fullCalendar({
    events: function(start, end, timezone, callback) {
      callback(Events.find().fetch()); 
    },

    eventRender: function(event, element) {
      // PROGRAMMATICALLY RENDER TEMPLATE
      // The following does not work - no data is attached 
      return Template.calendarEvent.renderFunction(event);
    }
  });
};
事件模板HTML

<template name="calendarEvent">
  {{title}} 
  <!-- full layout for rendering event here -->
</template>

该功能并没有被删除,它被重命名,并且在不久前它也改变了行为(当spark被blaze取代时)

你要找的是

请注意,它返回的是
Blaze.View
,而不是DOM对象

要使其成为dom对象,可以将其作为父对象提供:

var renderedCalendarEvent = document.createElement("div");

Blaze.renderWithData(Template.calenderEvent, event, renderedCalendarEvent);
DOM元素
renderedCalendarEvent
将对模板使用的任何反应源作出反应

如果您需要HTML,您可以使用,但HTML将保持静态

Blaze.toHTMLWithData(Template.calenderEvent, event);

谢谢,这太完美了。非常感谢。我已经离开这个项目几个月了,在此期间Meteor发生了很大的变化。我还没有机会熟悉新的Blaze场景。使用Blaze.renderWithData()或Blaze.render()时,事件似乎没有正确连接。这是真的,还是我想知道的bug?@MichaelGraff事件应该可以很好地处理
.render()
.renderWithData()
,但不能处理
.toHTMLWithData()
。我同意应该这样做,但对我来说似乎不是这样。我已经向流星队提交了github问题;当我得到更多信息或发现这是我的错误时,我会更新它。@MichaelGraff你能发布一个到github问题的链接吗?
Blaze.toHTMLWithData(Template.calenderEvent, event);