我正在尝试使用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>
事件模板 JS
Template.calendarEvent.events({
// define template event handlers
});
该功能没有被删除,它被重命名了,不久前它也改变了行为(当火花被火焰取代时)。
您正在寻找的是Blaze.renderWithData。
请注意,它返回的是 Blaze.View
对象,而不是 DOM 对象。
要使其成为 dom 对象,您可以将其作为父对象提供:
var renderedCalendarEvent = document.createElement("div");
Blaze.renderWithData(Template.calenderEvent, event, renderedCalendarEvent);
DOM 元素renderedCalendarEvent
将对模板使用的任何反应源做出反应。
如果你需要HTML,你可以使用Blaze.toHTMLWithData,但该html将保持静态。
Blaze.toHTMLWithData(Template.calenderEvent, event);