我在点击时打开的日历事件中添加了bootstrap popovers:
eventClick: (event, jsEvent, view) ->
if event.ajaxUrl?
elem = jQuery(@)
elem.popover('destroy')
jQuery.ajax({url: event.ajaxUrl})
.done (result) ->
elem.popover(
placement: 'top'
html: true
trigger: 'manual'
title: moment(event.start).format('dddd, DD. MMMM YYYY - HH:mm')
content: result
container: 'body')
elem.popover('show')
我的问题是,当我更改日历视图时(例如,更改月份或周/日布局),这些弹出窗口保持打开状态。由于弹出窗口绑定到日历中的.fc-event
div / span,我需要访问这些DOM元素才能运行.popover('destroy')
。
每当更改fullCalendar视图时,旧的DOM-Elements将替换为新视图的视图,因此我必须在视图实际更改之前访问它们。不幸的是,事件加载只有回调(loading
在视图更改后发生)和viewDisplay
(同样,但是你得到了新视图)。
为了确保我正确理解viewDisplay
,我在日历中添加了一个小测试,总是给我“0”(数据选择器来自jquery data selector)
viewDisplay: (view) ->
alert(jQuery('.fc-event:data(popover)').size())
是否有办法在每次更改视图时挂钩日历过程 - 但在视图实际更改之前?
修改
现在我只是在将鼠标移动到任何日历按钮上时简单地销毁弹出窗口(因为在视图更改后将执行与click
的绑定),但此解决方案只是一种解决方法
jQuery('.fc-button').on 'mouseover', () ->
jQuery('.fc-event:data(popover)').popover('destroy')
答案 0 :(得分:3)
我认为您正在寻找http://fullcalendar.io/docs/display/viewRender/
来自doc
<强> viewRender 强>
在呈现新的日期范围时或在视图类型时触发 开关。 function(view,element)视图是View对象的 新观点。 element是新容器的jQuery元素 图。
当用户更改视图时,将触发此回调,或 当调用任何日期导航方法时。
在完全呈现视图后,将触发此回调, 但是,在渲染事件之前(另请参阅:eventAfterAllRender)。
答案 1 :(得分:0)
在V4中,不建议使用viewRender,请查看发行说明,现在它们具有:
“ viewSkeletonRender”回调,在安装新视图时触发,它接收一个视图对象,其中包含很多东西。
“ viewSkeletonDestroy”回调,该回调在旧视图即将被卸载之前触发。
-
或者,思想可能无法直接回答问题,您可以使用“ datesRender”回调。我需要的是在上一个,下一个或视图更改时运行一个函数。 (我必须根据日期范围和观看次数来计算事件类型的总时数)