2015-07-21 21 views
0

我正在使用帶有多個資源的fullcalendar fork。 我想用回調「eventMouseover」改變邊框顏色爲具有相同標題的所有事件,我有這樣的事情:fullcalendar eventMouseover rerenderEvents

eventMouseover: function(event, jsEvent, view) { 
    //get day viewed 
    var currentViewDate = $('#calendar').fullCalendar('getDate') 

    var events = $('#calendar').fullCalendar('clientEvents', function(event) { 
     //get list of events for displayed day 
     if (moment(event.start).format('YYYY-MM-DD') == currentViewDate.format('YYYY-MM-DD')) { 
      return true;  
     } 
    }); 

    //search events with the same title as event where is mouse over 
    for (var i = 0; events.length > i ; i++) { 
     if (events[i].title == event.title) { 
      events[i].borderColor = 'blue' 
      console.log(event.title) 
     } 
    } 

    $('#calendar').fullCalendar('rerenderEvents') 
} 

和它的作品,意味着它改變了特定事件邊框顏色,但看起來像當我把鼠標放在事件上時有奇怪的事情, 瀏覽器的內存使用量正在迅速增長,CPU利弊。約50%。 看起來它不斷重現渲染事件。

正如你可以從我的代碼見上面,我把

console.log(event.title) 

檢查如何與特定的標題很多次活動將在控制檯中顯示。每次

沒有

$('#calendar').fullCalendar('rerenderEvents') 

計數是正確的,當我把鼠標指針的事件,但邊框的顏色沒有改變, 但

$('#calendar').fullCalendar('rerenderEvents') 

計數不正確,每次當鼠標時間指針在事件上,計數在控制檯不斷增長和CPU缺點。正在增長和記憶, 但邊界被更改爲所有具有相同標題的事件。

有任何解決方法執行

$('#calendar').fullCalendar('rerenderEvents') 

只有一次,當鼠標懸停事件? 或者有人可以幫助以另一種方式做到這一點。

回答

0

我覺得這裏的問題是,當你重新描繪的事件時,立即eventMouseOver再次觸發,引起另一個重新呈現,依此類推,直到你把鼠標放在一個事件。

爲了防止這種情況,有多種解決方案,例如:慶祝活動(一個屬性添加到它),並檢查這在你的函數,所以當它被稱爲再次,你就跳過。當然,這需要當你彈出鼠標時,你沒有標記事件。

另外一個是,你使用一個變量,如果它比當前事件的標題,你的鼠標懸停-ED不同,保存這個新稱號,並調用重新呈現。在eventRender回調中,檢查是否給定的事件具有相同的標題,如果是,則更改其邊框。