2010-05-20 85 views
0

好的,所以我在設置插件初始化後嘗試設置它們的值時使用回調函數的選項有問題。我認爲這是一個常見的行爲,在啓動日曆後動態設置事件回調。fullcalendar:初始化後更新選項函數回調

這裏是一個代碼snipit:

 
$(document).ready(function() { 
    $('#calendar').fullCalendar({ 
    editable: false 
    ,events:[{"title":"meeting.title","start":"2010-05-21 15:58:16 UTC"},{"title":"meeting.title","start":"2010-05-24 15:58:16", "url":"http://google.com"}] 
/* ,eventClick: function(event) { 
       if (event.url) { 
        window.open(event.url); 
        return false; 
       } 
      } 
    */ 
    }); 
$('#calendar').fullCalendar('option', 'eventClick', function(event) { 
      if (event.url) { 
       window.open(event.url); 
       return false; 
      } 
     }); 

}); 

你可以看到,設置eventClick功能註釋掉了一個初始化選項。如果我這樣做,它可以正常工作。但是,如果我嘗試初始化後,設置它,它不工作:(

的是一些其他的方式來做到這一點?還是我堅持不必設置行爲前期?

+0

這是你寫的插件嗎?你爲什麼連續兩次初始化fullCalendar? – Metropolis 2010-05-20 20:49:31

+1

它不是初始化它的兩次,第二次調用它來設置一個選項。這是一個典型的jquery模式。 – 2010-05-20 21:52:26

回答

0

的fullCalendar eventClick是一個callback method。查看代碼後,我認爲你可以在日曆初始化後添加這個選項,我甚至嘗試在日曆數據(存儲公共函數的地方)中添加eventClick函數,我能想到的唯一選擇就是附加你自己的事件處理程序,你可以試試這個:

$('#calendar').find('.fc-event,.ui-event').find('a[href]').live('click', function(){ 
window.open($(this).attr('href')); 
return false; 
}) 

哦,我將.fc-event.ui-event類作爲目標的原因是因爲它會根據您使用theme選項而變化。

+0

我很欣賞那種及時的反饋。我正在考慮那件事(使用live和binding),但是我希望能夠使用「option」arg來調用fullcalendar,因爲它可以很好地與其他插件一起工作(albiet更基本)。 我認爲用fullcalendar事件綁定和觸發事件的方式是阻止這種情況的方式。例如,綁定到子節點(fc事件)而不是fullcalendar節點本身。 主要問題是,如果可以在插件已經被初始化後動態設置eventClick等回調方法。感謝您的回答。 – 2010-05-20 21:51:41

+0

Opps,我有'event.url'而不是'href'屬性。另外,我知道這是你想要的,我只是不確定這是可能的。 – Mottie 2010-05-20 22:22:47

1

很顯然,我相信你已經解決了這個問題,但對於任何可能遇到此問題的人,這裏是我如何解決它的。

$(document).ready(function() { 
    $('#calendar').fullCalendar({ 
    editable: false 
    ,events:[{"title":"meeting.title","start":"2010-05-21 15:58:16 UTC"},{"title":"meeting.title","start":"2010-05-24 15:58:16", "url":"http://google.com"}] 
    ,eventClick: function(event) {eventClickCustom(event)} 
    }); 

var eventClickCustom = function(event) 
{ 
    //do what you want here, you can can update this function all you want. 
} 

//then later 
var eventClickCustom = function(event) 
{ 
    //updated version of the function 
}