执行此操作的一般方法是什么?我对fullcalendar反应包装器有问题。不幸的是,官方版本(rzymek)无法正常工作,所以我决定创建自己的包装器。我使用渲染和销毁事件进行插件实例初始化和销毁,但是。。。它没有反应性地工作(需要明确的是,它的工作方式与rzymek版本完全一样)。怎么了?
编辑:我的问题不仅仅是反应性事件,我希望整个日历都是完全反应性的,也就是说,每一次初始化参数的更改都应该将日历重新发布到新状态。
Fullcalendar要被动工作有点棘手。我最终使用的一个OK破解是将Collection.find()调用和refetchEvent封装在一个类似的自动运行中
Template.foo.onRendered(function() {
this.autorun(function() {
YourCollection.find({});
$(".calendar").fullCalendar("refetchEvents");
});
});
因此,您对YourCollection
进行的任何更新都将触发refetchEvent,该事件将执行您的events
和eventRender
全日历回调,然后您可以在其中更新日历。
问题是,Blaze在参数更改时不会重新提交模板。这真的很奇怪。如何解决这个问题?使用Template.currentData(),它是返回实际模板数据上下文的反应源。下一步是:在onRendered回调中,我们启动autorun,它会侦听模板数据上下文中的更改,并根据更改重新发布日历。
最后,我们有了反应式完整日历。