日历视图更改前的回调

ste*_*tex 5 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')
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我更改日历视图时,这些弹出窗口保持打开状态(例如,更改月份或周/日布局).由于弹出窗口绑定到.fc-event日历中的div/span ,我需要访问这些DOM元素才能运行.popover('destroy').

每当更改fullCalendar视图时,旧的DOM-Elements将替换为新视图的那些,因此我必须在实际更改视图之前访问它们.不幸的是,只有事件加载的回调(loading在视图改变后发生)和viewDisplay(同样,但你得到新的视图).

为了确保我理解viewDisplay正确,我在日历中添加了一个小测试,总是给我"0"(数据选择器来自jquery数据选择器)

viewDisplay: (view) ->
    alert(jQuery('.fc-event:data(popover)').size())
Run Code Online (Sandbox Code Playgroud)

是否有办法在每次更改视图时挂钩日历过程 - 但在视图实际更改之前?

编辑

现在,我只是在鼠标移动到任何日历按钮上时(只是click在视图更改后执行绑定),只是销毁弹出窗口,但此解决方案只是一种解决方法

jQuery('.fc-button').on 'mouseover', () ->
    jQuery('.fc-event:data(popover)').popover('destroy')
Run Code Online (Sandbox Code Playgroud)

Mar*_*ess 9

V3

我想你正在寻找http://fullcalendar.io/docs/display/viewRender/

来自文档

视图渲染

当呈现新的日期范围或视图类型切换时触发。function( view, element ) view 是新视图的视图对象。element 是用于新视图容器的 jQuery 元素。

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

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

更新

V4 从viewRender 重命名为datesRender https://fullcalendar.io/docs/v4/datesRender

V5 从datesRender 重命名为datesSet https://fullcalendar.io/docs/datesSet