以编程方式(非声明方式)呈现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);