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