2013-04-03 25 views
10

Potrzebuję dodać identyfikator do każdego pojedynczego wydarzenia z Fullcalendar, znalazłem to http://arshaw.com/fullcalendar/docs/event_data/Event_Object/, ale nie wiem jak, ten identyfikator jest
unikalny dla każdego pojedynczego zdarzenia, ponieważ wtedy zapisuję zdarzenia w bazie danych Mysql. DziękiID wydarzenia (Fullcalendar)

+0

ten identyfikator nie będzie wyjątkowy, ponieważ, jak stwierdzono w dokumentacji powtarzanie wydarzenia powinny mieć ten sam identyfikator zdarzenia. Za każdym razem, gdy zapełniasz wydarzenia w pełnym kalendarzu, możesz nadać identyfikator każdemu wydarzeniu, jednak nie jest to obowiązkowe. –

+0

Ale potrzebuję unikalnego identyfikatora, ponieważ później usuwam o edycji wybranego wydarzenia i potrzebuję identyfikatora do zrobienia tego, jak mogę to zrobić, podać identyfikator, gdy zapełniam kalendarz? –

Odpowiedz

1

Identyfikator obiektu zdarzenia jest polem opcjonalnym. Możesz powrócić i użyć tego, co chcesz, aby powrócić ze skryptu po stronie serwera. Możesz utworzyć identyfikator złożony z kombinacji pól ... "calendarName_eventID" lub po prostu użyć identyfikatora zdarzenia z bazy danych. Nie jesteś pewien, że chcesz ujawnić swój klucz podstawowy, ale (jest to kolejna kwestia sama w sobie). Krótko mówiąc ... możesz stworzyć własną wartość identyfikatora.

Możesz chcieć rzucić okiem tutaj: https://code.google.com/p/fullcalendar/issues/detail?id=713

zajmuje wątek z usunięciem wydarzenia w kalendarzu, ale pokazuje, jak oryginalny plakat zachodziło identyfikator na oddzwonienia z jego/jej uratować imprezy.

Mam nadzieję, że to pomocne.

+0

Dziękuję człowiekowi, ale myślę, że ten post jest za stary i może to jest powód, dla którego to nie działa dla mnie –

1

OK, oto mój sposób rozwiązania. najpierw pojawia się ostatni Identyfikator zdarzenia z mojego DB i ja plus 1 do ostatniego id

<?php 
$sql = mysql_query("SELECT id FROM calendar ORDER BY id DESC LIMIT 1"); 

$resul = mysql_fetch_row($sql); 
$idActual = $resul[0]; 
$idActual = $idActual + 1; 
?> 

Potem wysłać identyfikator do JS

var idActual = "<?php echo $idActual ?>"; 

i to wszystko.

+1

Czy dzwonisz do niego osobno, kiedy zaczynasz tworzyć nowe wydarzenie? Czy użytkownik może utworzyć więcej niż jedno zdarzenie przed zapisaniem w bazie danych? – fletch

+0

Tak, użytkownik może utworzyć więcej niż jedno zdarzenie, zanim zostanie zapisany w bazie danych. –

+0

Bez odświeżania strony, w jaki sposób wypełniasz każdy nowy "$ idActual", którego potrzebujesz? Sądzę, że w większości przypadków chciałbyś wykonać wywołanie AJAX, aby uzyskać niezbędny identyfikator. – fletch

4

Znalazłem rozwiązanie! Podczas tworzenia każdym razie umieścić swoją unikatową id tutaj:

var shift = calendar.fullCalendar('renderEvent', 
     { 
      id: shift_id, 
      title: current_name, 
      start: new Date(y, m, d + current_day, current_start_time_h, current_start_time_m), 
      end: new Date(y, m, d + current_day, current_end_time_h, current_end_time_m), 
      allDay: false 
     }, true // make the event "stick" 
     ); 

Po tym ID to słuchacz dołączy w strukturze DOM:

 eventAfterRender:function(event, element, view) { 
$(element).attr("id","event_id_"+event._id); 
}, 

dostać wszystkie wydarzenia na polu:

console.log(calendar.fullCalendar('clientEvents')); 

Teraz masz szereg zdarzeń, a wszystkie zdarzenia są ponumerowane w strukturze DOM!

0

polecam ustawienie identyfikatora param w prameters podobny do tego:

$('#calendar').fullCalendar({ 
 
    id: 'calendar', 
 
    eventReceive: function(event) { 
 
    alert(this.calendar.options.id); 
 
    }, 
 
    eventDrop: function(event) { 
 
    alert(this.calendar.options.id); 
 
    }, 
 
    eventClick: function(event) { 
 
    alert(this.calendar.options.id); 
 
    }, 
 
    eventRender: function(event) { 
 
    alert(this.calendar.options.id); 
 
    } 
 
});

0

klarowny roztwór

Podczas pobierania zdarzeń z Ajax również przypisać "id" pochodzące z DB

id: entry.id

$.ajax({ 
    url: '/eventsJson', 
    type: 'GET', 
    data: { }, 
    error: function() { 
     alert('there was an error while fetching events!'); 
    } 
}).done(function (doc) { 

    var event = Array(); 
    $.each(doc, function(i, entry) { 
     event.push({id:entry.id, title: entry.title, start: entry.start}); 
    }); 

Event Kliknij

eventClick: function(event, jsEvent, view) { 
       var title = prompt('Event Title:', event.title, { buttons: { Ok: true, Cancel: false} }); 

      if (title){ 
      event.title = title; 

      var data = { 
       'title':title 
      }; 

      $.ajax({ 
      url: '/events/'+event.id, 
      data: data, 
      type: 'POST', 
      dataType: 'json', 
      success: function(response){ 
       if(response.status == 'success') 
       $('#calendar').fullCalendar('updateEvent',event); 
      }, 
      error: function(e){ 
       alert('Error processing your request: '+e.responseText); 
      } 
      }); 
      } 
     } 
0

jako Fletch wspomina, trzeba wygenerować identyfikator dla każdego nowego zdarzenia w DB lub z kodem połączenia DB w celu aby umożliwić współbieżność.Bryan Villafañe stosuje podobne podejście, ale oto moje rozwiązanie.

dla FC javascript:

select: function(start) { //executed when clicked on a day 
    var title = prompt('Event title:'); 
    if (title) { 
     $.ajax({ 
      url: '/events.php', 
      data: 'title='+title+'&start='+moment(start).format('YYYY-MM-DD'), 
      type: "POST", 
      success: function(id) { 
       console.log(id); //used for debug 
       if (!isNaN(id)){ //on success checks the result 
        event = { //and adds the event locally with the returned DB id. 
         title: title, 
         start: start, 
         team: team, 
         id: id 
        }//then renders the new event 
        $('#calendar').fullCalendar('renderEvent', event, true); 
       } 
      }, 
      error: function(error){ 
       console.log(error); 
      } 
     }); 
    } //unselects the clicked day 
    $('#calendar').fullCalendar('unselect'); 
} 

Ten wysyła datę jako formacie YYYY-MM-DD ponieważ używam tylko wydarzenia ALLDAY, ale można zaktualizować odpowiednio. Wysłanie tylko start spowoduje czas epoki z milisekundami.

Baza danych zwraca identyfikator wiersza, jeśli wstawienie zakończyło się pomyślnie, a następnie jest przypisane do zdarzenia utworzonego lokalnie i jest renderowane. Oto funkcja DB:

$result = "Wrong parameter combination!"; 
if ($_POST[title]&&$_POST[start]) { 
    $result = $db->exec("INSERT INTO events (title, start) VALUES ('$_POST[title]','$_POST[start]')"); 
    if($result==1){ 
     $result = $db->lastInsertRowID(); 
    } 
} 
echo $result; 

Tutaj sprawdzam dwa parametry POST i wstawiam. Jeśli insert się powiódł, otrzymam ostatni identyfikator wiersza wstawienia i zwrócę go do JS. W przeciwnym razie zwracany jest komunikat o błędzie.

Używam SQLite3 dla mojego DB, ale ostatni wstawiony wiersz dla MySQL można sprawdzić, jak pokazano here. Istnieje niewielka szansa, aby ktoś wstawił inne zdarzenie między sprawdzaniem identyfikatora wkładki i ostatniego rzędu, ale jeśli nie masz dużego ruchu, wszystko będzie w porządku.

0

Każde zdarzenie ma już swój własny, unikalny ID:

eventClick: function(event){ 
    alert(event._id); 
} 
Powiązane problemy