我在某处创建了一个fullCalendar小部件。我无法更改初始化它的代码。所以我不能在第一次调用中添加任何回调。
像这样:
$(elem).fullCalendar({
complete: function () {
...
}
})
实际创建一个新的fullCalendar,而不是修改实际的fullCalendar来更改/添加完整的回调。
有没有其他方法可以找出加载事件的时间我正在考虑轮询clientEvents
,但我意识到我可能在一个月内没有事件,所以我不能指望数组总是有一些东西。
顺便说一句,它是fullCalendar 1.6。
答案 0 :(得分:1)
您可以在初始化日历对象后定义回调,并确定何时已呈现所有事件,请使用eventAfterAllRender事件。方法如下:
var calendar = $('#calendar').fullCalendar('getCalendar');
calendar.on('eventAfterAllRender', function(view) {
alert('all events rendered!');
});
没关系,此功能仅在2.4版本开始提供。
相反,您可以轮询DOM以查找fullcalendar元素,如下所示:
function checkForInit() {
if($(".fc-view").children().length) {
alert("initialized!");
} else {
setTimeout(function() {
checkForInit();
}, 10);
}
}
$(document).ready(function() {
checkForInit();
});
答案 1 :(得分:0)
您可以使用版本1.6中提供的eventAfterAllRender事件:
$(elem).fullCalendar({
eventAfterAllRender: function (view) {
...
}
})
最好的问候!
的Krzysztof
答案 2 :(得分:0)
好的,我发现了一个似乎有效的解决方案!
var waitPrint = true
function autoPrint() {
var elem = $('.fc')
var calendar = elem.data('fullCalendar')
console.log('Searching calendar')
if (calendar && waitPrint) {
waitPrint = false
console.log('Bund new event')
var _super = calendar.options.eventAfterAllRender
calendar.options.eventAfterAllRender = function (event, element, view) {
if (_super) {
_super.apply(this, arguments)
}
window.print()
}
} else if (waitPrint) {
setTimeout(autoPrint, 100)
}
}
autoPrint()
我在这里使用fc
类轮询一个元素。一找到,就检查"数据"是否存在名为fullCalendar
。如果它返回一个dict,则表示已创建fullCalendar实例。这几乎就是Dane为2.4版提出的建议,但这在1.6中没有吸气剂。我们必须自己搞定。幸运的是,它存储在元素的data
中,而不是存储在其他一些神秘的地方。
继续下一步,fullCalendar不是1.x中的eventEmitter,但我们仍然可以访问选项,这些选项似乎只是对最初传递的选项的引用。我重写了eventAfterAllRender
。调用已经定义的方法(如果存在)并在完成后调用我的print方法。
从技术上讲,我们可以从那里覆盖几乎任何已定义的方法。唯一的问题是你必须比fullCalendar初始化更快。
我相信如果我们深入挖掘,我们可能会直接修补日历库以消除时间问题。轮询并不是很好。
到目前为止最佳解决方案
var oldFullCalendar = $.fn.fullCalendar
function newFull(options) {
var _super_func = null
if (typeof options == 'string') {
oldFullCalendar.apply(this, arguments)
} else {
options = options || {}
if (options.loading) {
_super_func = options.loading
}
options.loading = function (loading) {
console.log(loading, 'loading')
if (_super_func) {
_super_func.apply(this, arguments)
}
if (!loading) {
window.print()
}
}
oldFullCalendar.apply(this, arguments)
}
}
$.fn.fullCalendar = newFull
可以通过覆盖loading
来改进第一个解决方案。因为它是在处理加载时通知的方法,并且在eventAfterAllRender
回调之后也显然被调用。