2010-05-20 4 views
0

Ok, j'ai donc un problème avec les options de paramétrage dont les valeurs sont des fonctions de rappel en essayant de les régler après l'initialisation du plugin. Je pense que ce serait un comportement commun, pour définir dynamiquement le rappel d'événement après l'initiation du calendrier.fullcalendar: mise à jour des callbacks des fonctions d'option après init

Voici un snipit de code:

 
$(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; 
      } 
     }); 

}); 

Vous pouvez voir que le réglage de la fonction eventClick en option init commenté. Si je le fais de cette façon, ça fonctionne bien. Toutefois, si je tente de le régler après l'initialisation, il ne fonctionne pas :(

Est-ce l'autre façon de le faire? Ou suis-je coincé à devoir régler le comportement initial?

+0

Est-ce un plugin que vous écrivez? Pourquoi initialisez-vous le fullCalendar deux fois de suite? – Metropolis

+1

Il ne l'initialise pas deux fois, le second l'appelle pour définir une option. C'est un motif de jquery typique. –

Répondre

0

Le fullCalendar eventClickcallback method Après avoir parcouru le code, je ne pense pas que vous puissiez ajouter cette option après l'initialisation du calendrier, j'ai même essayé d'ajouter la fonction eventClick aux données du calendrier (où il stocke les fonctions publiques). la seule alternative que je peux penser serait d'attacher votre propre gestionnaire d'événement.Vous pouvez essayer ceci:

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

Oh, et la raison pour laquelle je cible à la fois les classes .fc-event et .ui-event est parce que cela change selon que vous utilisez l'option theme.

+0

J'apprécie cette rétroaction opportune. J'envisageais cette chose (en utilisant live et binding) mais j'espérais pouvoir appeler fullcalendar avec l'option "arg" car cela fonctionne bien avec d'autres plugins (albiet plus basique). Je pense que la manière dont les événements sont liés et déclenchés avec des événements fullcalendar est ce qui empêche cela. Par exemple, la liaison au noeud enfant (fc-event) plutôt que le noeud fullcalendar lui-même. La question principale, était s'il était possible de définir dynamiquement des méthodes de rappel comme eventClick après que le plugin a déjà été initialisé. Merci pour votre réponse. –

+0

Opps, j'avais 'event.url' au lieu de l'attribut' href'. Aussi, je sais que c'est ce que tu voulais, je ne suis pas sûr que ce soit possible. – Mottie

1

De toute évidence, je suis sûr que vous avez déjà travaillé sur ce problème, mais pour tous ceux qui pourraient rencontrer ce problème, voici comment j'ai travaillé autour.

$(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 
}