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

Stu*_*ave 3 fullcalendar meteor

我正在尝试使用自定义添加到FullCalendar的事件eventRender.我知道我可以直接从我的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);
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

事件模板HTML

<template name="calendarEvent">
  {{title}} 
  <!-- full layout for rendering event here -->
</template>
Run Code Online (Sandbox Code Playgroud)

事件模板JS

Template.calendarEvent.events({
  // define template event handlers
});
Run Code Online (Sandbox Code Playgroud)

d_i*_*ble 7

该功能未被删除,它被重命名,很久以前它也改变了行为(当火花被火焰取代时).

您正在寻找的是Blaze.renderWithData.

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

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

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

Blaze.renderWithData(Template.calenderEvent, event, renderedCalendarEvent);
Run Code Online (Sandbox Code Playgroud)

DOM元素renderedCalendarEvent将对模板使用的任何反应源做出反应.

如果您需要HTML,可以使用Blaze.toHTMLWithData,但该html将保持静态.

Blaze.toHTMLWithData(Template.calenderEvent, event);
Run Code Online (Sandbox Code Playgroud)