2014-10-26 43 views
3

我正在嘗試擴展FullCalender JS插件的功能。我對JavaScript OOP概念以及jQuery插件開發頗爲陌生。在第一步中,我想知道如何使用和訪問FullCalendar插件。該fullCalendar方法可以在任何DOM元素調用,而歷參數可以作爲JSON對象:Javascript - 在初始化後更改FullCalendar.js回調

$('#calendar').fullCalendar({ 
    editable: true,    // a parameter 
    events: "./events.php",  // some events 

    eventRender: function(event, element) {  // a callback 
     // do something here 
    } 
}); 

我試圖調用此創建方法一改再改,回調eventRender,但它不工作。我猜是因爲日曆只允許在DOM元素上激活一個實例。但是,如何在不破壞和重新創建日曆的情況下更改參數和回調?

此外,我試圖直接訪問日曆對象,但我想由於封裝它不通過FullCalendar暴露。相比之下,我發現fullCalendar函數可以用一個字符串來指定一個將在日曆上調用的方法。這是插件封裝的通用機制嗎?

+1

什麼是關於需要改變eventRenderer你的目標是什麼? – charlietfl 2014-10-26 19:46:05

+0

回調對我來說只是一個例子,如何更改我剛剛創建的日曆實例。但在這種情況下,這似乎不是一種有效的做法。 – Michbeckable 2014-10-26 20:32:22

+0

與許多插件一樣,還有一種銷燬方法也是http://fullcalendar.io/docs/display/destroy/,所以如果你需要改變行爲,你可以用不同的配置重新初始化 – charlietfl 2014-10-26 20:46:01

回答

2

關於第一部分,FullCalendar初始化期間合併選項

var options = mergeOptions({}, defaults, instanceOptions); 

,所以你只能通過

var currentHandler 

$('#calendar').fullCalendar({ 
eventRender: function(event, element) {  // a callback 
    currentHandler(event, element) 
} 
}); 

改變eventRender,然後更改currentHandler執行(即currentHandler = myFirstHandler

當它來調用插件方法,是的這是一種常見的做法,並在這裏描述How to create a jQuery plugin with methods?

+0

是的,我想這種方式來改變處理程序,但我希望有另一種方式。 – Michbeckable 2014-10-26 20:26:13

1

改爲eventRender我會使用官方eventAfterAllRender回調,請參閱docs

 // hide div after fullcalendar has initialized 
     eventAfterAllRender: function(view) 
     { 
      $('.mycustomdiv').hide(); 
     } 

這是一種隱藏在文檔中。將這個函數重命名爲afterinit或者更好會更好。

0

不確定發佈時正在使用的fullcalendar的版本,但對於現在使用v2或v3的用戶,fullcalendar具有on/offget/set實用程序,允許您動態添加/刪除處理函數或獲取/設置選項初始化後。

https://fullcalendar.io/docs/utilities/handlers/

https://fullcalendar.io/docs/utilities/dynamic_options/

根據文檔:

var calendar = $('#calendar').fullCalendar('getCalendar'); 

calendar.on('eventRender', function(event, element, view) { 
    console.log('event rendered!', event); 
});