7

我将引导弹出窗口添加到单击时打开的日历事件中:

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 元素都会替换为新视图的元素,因此我必须在视图实际更改之前访问它们。不幸的是,只有事件加载的回调(loading在视图更改后发生)和viewDisplay(相同,但你得到了新视图)。

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

viewDisplay: (view) ->
    alert(jQuery('.fc-event:data(popover)').size())

有没有办法在每次更改视图时挂接到日历进程 - 但在视图实际更改之前?

编辑

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

jQuery('.fc-button').on 'mouseover', () ->
    jQuery('.fc-event:data(popover)').popover('destroy')
4

2 回答 2

9

V3

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

来自文档

视图渲染

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

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

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

更新

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

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

于 2015-07-02T15:43:41.327 回答
3

在 V4 中,不推荐使用 viewRender,查看发行说明,现在它们有:

“viewSkeletonRender”回调,当新视图被挂载时触发,它接收一个包含很多好东西的视图对象。

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

--

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

于 2019-06-20T06:48:30.417 回答