日历视图更改前的回调

时间:2013-04-13 18:18:42

标签: fullcalendar

我在点击时打开的日历事件中添加了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')

2 个答案:

答案 0 :(得分:3)

我认为您正在寻找http://fullcalendar.io/docs/display/viewRender/

来自doc

  

<强> viewRender

     

在呈现新的日期范围时或在视图类型时触发   开关。 function(view,element)视图是View对象的   新观点。 element是新容器的jQuery元素   图。

     

当用户更改视图时,将触发此回调,或   当调用任何日期导航方法时。

     

在完全呈现视图后,将触发此回调,   但是,在渲染事件之前(另请参阅:eventAfterAllRender)。

答案 1 :(得分:0)

在V4中,不建议使用viewRender,请查看发行说明,现在它们具有:

“ viewSkeletonRender”回调,在安装新视图时触发,它接收一个视图对象,其中包含很多东西。

“ viewSkeletonDestroy”回调,该回调在旧视图即将被卸载之前触发。

-

或者,思想可能无法直接回答问题,您可以使用“ datesRender”回调。我需要的是在上一个,下一个或视图更改时运行一个函数。 (我必须根据日期范围和观看次数来计算事件类型的总时数)