【问题标题】:Packing nonreactive libraries to reactive wrappers将非反应性库打包到反应性包装器
【发布时间】:2016-03-20 08:00:08
【问题描述】:
这样做的一般方法是什么?我对 fullcalendar 反应式包装器有问题。不幸的是,正式版(rzymek)不能正常工作,所以我决定创建自己的包装器。我使用渲染和销毁事件进行插件实例初始化和销毁,但是......它没有反应性地工作(要清楚,它的工作原理与 rzymek 版本完全一样)。怎么了?
编辑:我的问题不仅仅是反应事件,我希望完整的日历完全反应,这意味着初始化参数的每次更改都应该将日历重新呈现到新状态。
【问题讨论】:
标签:
javascript
meteor
fullcalendar
meteor-blaze
【解决方案1】:
问题是,当 Blaze 的参数更改时,它不会重新呈现模板。这真的很奇怪。如何解决这个问题?使用 Template.currentData() ,它是返回实际模板数据上下文的反应源。下一步是:在 onRendered 回调中,我们启动自动运行,它监听模板数据上下文的变化并根据变化重新渲染日历。
最后,我们有反应式全日历。
【解决方案2】:
Fullcalendar 响应式工作有点棘手。我最终使用的一个 OK hack 是将 Collection.find() 调用和 refetchEvent 包装在自动运行中,如下所示:
Template.foo.onRendered(function() {
this.autorun(function() {
YourCollection.find({});
$(".calendar").fullCalendar("refetchEvents");
});
});
因此,您对 YourCollection 所做的任何更新都会触发一个 refetchEvent,该事件将执行您的 events 和 eventRender fullcalender 回调,然后您可以在其中更新日历。