2014-10-26 82 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); 
});