好吧,我发现,似乎是工作的解决方案!
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
的存在。如果它返回一个字典,那么就意味着fullCalendar实例被创建。这是相当多的丹麦人有什么建议2.4版本,但这个1.6没有消气。我们必须自己解决。幸运的是,它是存储在元素的data
,而不是在其他一些神秘的地方。在下一步
移动,fullCalendar是不是在1.x中的eventEmitter,但我们仍然有机会获得期权,这似乎只是在第一次获得通过,该选项的参考。我覆盖了eventAfterAllRender
。调用已经定义的方法(如果存在),并在完成时调用我的打印方法。
技术上从那里,我们可以从那里覆盖几乎任何定义的方法。唯一的问题是你必须比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
而不是得到改善。因为这是在加载已经处理时通知的方法,并且在回调之后显然也调用该方法。
不会工作,我不能改变fullCalendar的初始化,这将创建一个新的日历。 –