好吧,我發現,似乎是工作的解決方案!
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的初始化,這將創建一個新的日曆。 –