2010-10-22 13 views
5

Qualcuno può dirmi come interrompere il trascinamento/ridimensionamento degli eventi in cui event.id > 100? Solo quegli eventi dovrebbero essere non trascinabili.FullCalendar: come interrompere il trascinamento di eventi personalizzati?

aggiornato con codice di esempio:

eventRender: function(event, element) { 
    if (event.id > 100) { 
     event.disableDragging(); 
     event.disableResizing(); 
    } 

    element.qtip({ 
     content: GetEventToolTip(event), 
     position: { corner: { tooltip: 'bottomLeft', target: 'topMiddle'} }, 
     style: { 
      border: { 
       width: 1, 
       radius: 5 
      }, 
      padding: 5, 
      textAlign: 'left', 
      tip: false, 
      name: event.iscustom == 'True' ? 'cream' : 'dark' 
     } 
    }); 
} 

Grazie.

risposta

4

disableDraggingdisableResizing sono funzioni definite come fullcalendar di 1.4.8. Sono certo che 2 persone nel mondo non hanno provato il primo suggerimento :) Tuttavia, è necessario toccare l'oggetto UI jQuery per disabilitare il trascinamento o il ridimensionamento a livello di evento. Così (piuttosto che cercare di utilizzare le funzioni inesistenti) provare questo nella vostra eventRender(event, element) callback:

if (event.id > 100) { 

    element.draggable = false; 

} 

Nota che sto semplicemente impostando la proprietà sull'elemento jQuery in sé per quello che attiene al comportamento trascinabile di UI.

Lo stesso vale per ridimensionabile, tranne che è necessario rimuovere il div (class = ui-resizable-handle ui-resizable-s) che viene aggiunto da fullcalendar identificandolo con un selettore jQuery e la rimozione (tanto per essere sicuro di impostare un className unico per evento negli eventi yoru array in modo da poterlo facilmente identificare nel DOM). Si prega gentilmente di presentare una petizione agli sviluppatori di fullcalendar per aggiungere le proprietà e disableResizing all'oggetto Event. Ci vuole meno di un minuto per aggiungere il supporto per questo alla fonte.

+0

Risposta eccellente. Ha funzionato bene per me. Grazie Aaron !!! – Saiful

+0

@Saiful Come posso disabilitare la ridimensionamento? Ho provato ad aggiungere eventRender: function (event, element) { if (event.title == "typeA") {\t \t \t $ ('. TipoA'). Resizable = false; } }, senza fortuna – BaconJuice

+1

In fullcalendar v2, la proprietà 'editable' dovrebbe essere usata al posto di' draggable' – akn

2

direi:

if(event.id > 100) 
{ 
    event.disableDragging(); 
    event.disableResizing(); 
} 
+1

1: E, probabilmente il posto migliore per mettere questo sarebbe nella richiamata eventRender: http: // arshaw .com/fullcalendar/docs/event_rendering/eventRender/ – sdolan

+0

Non funziona, entrambi i metodi dicono: Errore: L'oggetto non supporta questa proprietà o metodo – Saiful

+0

si dovrebbe inserire del codice per capire meglio – Dalen

3

questo ha funzionato perfetto per me:

if (event.id > 100) { 
    element.draggable = false; 
    element.resizable = false; 
} 
12
eventRender: function(event, element) { 
    if (event.id.indexOf("IDENTIFYING_STRING") == -1) 
    { 
     event.editable = false; 
    }      
} 
+0

Molto buono! Mi piace questo. Grazie. Ho ancora finito con la rimozione delle classi in modo da non far diventare il mouse un puntatore e confondere l'utente. A parte questo, la soluzione perfetta. '$ (Elemento) .find ('fc-Resizer.') Rimuovere().; $ (elemento) .removeClass ('fc-draggable') removeClass ('fc-ridimensionabile');. ' – cocojiambo

-4

utilizzare questi tag durante la creazione del fullcalendar per disabilitare trascinamento o ridimensionamento. I documenti arshaw non sono molto esplicativi, ma questo è il modo di interpretarli.

$('#calendar').fullCalendar({ 
    disableResizing:true, 
    disableDragging:true, 

    //the rest of your code... 

disableDragging: booleano, default: false Disabilita tutti gli eventi di trascinamento, anche quando gli eventi sono modificabili.

disableResizing: booleano, default: false Disabilita tutti gli eventi di ridimensionamento, anche quando gli eventi sono modificabili.

0

si deve incidere fullcalendar.js

decommentare le linee

t.isEventDraggable = isEventDraggable; 
t.isEventResizable = isEventResizable; 

sostituire le funzioni:

function isEventDraggable(event) { 
     return isEventEditable(event) && !opt('disableDragging') && 
      !event.disableDragging; 
} 


function isEventResizable(event) { // but also need to make sure the seg.isEnd == true 
     return isEventEditable(event) && !opt('disableResizing') && 
      !event.disableResizing; 
} 

Ora è possibile abilitare/disabilitare il ridimensionamento e trascinando per ogni evento che si desidera.

0

Non ho avuto successo con i metodi mostrati qui. Ho finito per hacking fullcalendar.js per aggiungere un'opzione noDragging per gli eventi, che era in realtà estremamente semplice:

originale:

function isEventDraggable(event) { 
    return isEventEditable(event) && !opt('disableDragging'); 
} 

cambiato in:

function isEventDraggable(event) { 
    return isEventEditable(event) && !opt('disableDragging') && !event.noDragging; 
} 

appena aggiunto il controllo per event.noDragging.

-2

Utilizzare questi tag quando si crea il proprio fullcalendar per disabilitare il trascinamento o il ridimensionamento.

**> $('#calendar').fullCalendar({ 
> 
> editable: false, 
> 
> //the rest of your code... }** 
+0

Questo è per disabilitare globale, non per id> 100 – BaconJuice

0

element.draggable = false e event.ediable = false ha lavorato per me. Deve essere causa della versione più recente di FullCalendar. Se questo è il tuo caso, prova:

if (event.id > 100) { 
    event.startEditable = false; 
} 

Ha funzionato per me.

In alternativa si potrebbe annulla l'evento move dopo aver lasciato:

eventDrop: function (event, delta, revertFunc) { 

      if (event.id < 100) 
       revertFunc(); 
     } 
+0

revertFunc non è una funzione –

3

Questa è la soluzione migliore:

$('#calendar').fullCalendar({ 
    disableDragging = true 
}); 
2

FullCalendar v1.6.4

eventRender: function(jsEvent, element) { 

if(jsEvent.id > 100) { 

    jsEvent.startEditable = false; 
    jsEvent.durationEditable = false; 
    } 

    return element;    
} 

Questa soluzione ha ha funzionato per me come un fascino.

Ho implementato questa libreria JS con Ruby Gem "Fullcalendar_engine".

0

in modificabile basta scrivere falso e che non sarà in grado di trascinare e rilasciare modificabile: true

+1

Si prega di prendere in considerazione la modifica la risposta a includere più spiegazioni che potrebbero aiutare OP e chiunque possa avere lo stesso problema in futuro – CallumDA

Problemi correlati