Мне нужно добавить id к каждому событию из Fullcalendar, я нашел этот http://arshaw.com/fullcalendar/docs/event_data/Event_Object/, но я не знаю, как этот идентификатор уникально для каждого отдельного события, потому что тогда я сохраняю события в базе данных Mysql. Благодаря
Идентификатор события (Fullcalendar)
Ответ 1
Я нашел решение! Когда вы создаете какое-либо событие, поместите здесь свой идентификатор uniqe:
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"
);
После этого этот приемник добавляет идентификатор в структуре DOM:
eventAfterRender:function( event, element, view ) {
$(element).attr("id","event_id_"+event._id);
},
Чтобы получить все ваши события в поле:
console.log(calendar.fullCalendar('clientEvents'));
Теперь у вас есть массив событий, и все события пронумерованы в структуре DOM!
Ответ 2
Идентификатор объекта Event является необязательным. Вы можете возвратить и использовать все, что хотите вернуться со своей серверной стороны script. Вы можете создать составной идентификатор из комбинации полей... "calendarName_eventID" или просто использовать идентификатор события из своей базы данных. Не уверен, что вы хотите разоблачить свой первичный ключ, хотя (эта другая проблема сама по себе). Короче говоря... вы можете создать свое собственное значение идентификатора.
Вы можете посмотреть здесь: https://code.google.com/p/fullcalendar/issues/detail?id=713
В потоке рассматривается удаление события календаря, но показано, как исходный плакат устанавливал идентификатор в обратном вызове из своего события сохранения.
Надеюсь, что это поможет.
Ответ 3
ОК, вот мой способ решения. сначала я получаю последнее событие id из моей БД и я плюс 1 до последнего 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;
?>
тогда я отправляю id в JS
var idActual = "<?php echo $idActual ?>";
и что он.
Ответ 4
Я рекомендую вам установить param id в таких же параметрах, как и этот:
$('#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);
}
});
Ответ 5
Clear Solution
Когда вы выбираете события с помощью Ajax, также назначайте "id", который поступает из 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});
});
Событие Нажмите
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);
}
});
}
}
Ответ 6
Как упоминает fletch, вы должны сгенерировать идентификатор для каждого нового события в БД или код подключения DB, чтобы разрешить concurrency. Брайан Виллафан использует подобный подход, но вот мое решение.
Для фраз 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');
}
Это отправляет дату как формат YYYY-MM-DD
, так как я использую только события allDay, но вы можете обновить их соответствующим образом. Отправка только start
приведет к эпохе с миллисекундами.
DB возвращает идентификатор строки, если вставка прошла успешно, а затем назначается локально созданному событию и отображается. Вот функция 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;
Здесь я проверяю два параметра POST и вставляю их. Если вставка прошла успешно, я получаю последний идентификатор строки вставки и возвращаю его в JS. В противном случае возвращается сообщение об ошибке.
Я использую SQLite3 для моей БД, но последняя вставленная строка для MySQL может быть проверена, как показано здесь. У кого-то есть небольшой шанс вставить еще одно событие между проверкой идентификатора вставки и последней строки, но если у вас не будет высокий трафик, все будет в порядке.
Ответ 7
Каждое событие уже имеет свой собственный уникальный идентификатор:
eventClick: function(event){
alert(event._id);
}