2013-04-03 5 views
10

Мне нужно добавить id для каждого события из Fullcalendar, я нашел это http://arshaw.com/fullcalendar/docs/event_data/Event_Object/, но я не знаю, как этот идентификатор
уникален для каждого отдельного события, потому что тогда я сохраняю события в базе данных Mysql. СпасибоID события (Fullcalendar)

+0

Этот идентификатор не будет уникальным, поскольку, как указано в документации Повторяющиеся события должны иметь один и тот же идентификатор события. Всякий раз, когда вы заполняете события в полном календаре, вы можете давать идентификатор каждому отдельному событию, однако это необязательно. –

+0

Но мне нужен уникальный идентификатор, потому что позже я удалю o отредактирую выбранное событие, и мне нужен идентификатор для этого, как я могу это сделать, указать идентификатор, когда я заполняю календарь? –

ответ

1

Идентификатор объекта «Событие» является необязательным полем. Вы можете возвращать и использовать все, что хотите вернуться со своего сценария на стороне сервера. Вы можете создать составной идентификатор из комбинации полей ... «calendarName_eventID» или просто использовать идентификатор события из своей базы данных. Не уверен, что вы хотите разоблачить свой первичный ключ, хотя (это еще одна проблема сама по себе). Короче говоря ... вы можете создать свое собственное значение идентификатора.

Вы можете взглянуть здесь: https://code.google.com/p/fullcalendar/issues/detail?id=713

Нить сделки с удалением события календаря, но показывает, как оригинальный плакат установки ID на обратный вызов от его/ее сохранения события.

Надеюсь, это полезно.

+0

Спасибо, но я думаю, что сообщение слишком старое и, может быть, это причина для меня не работает –

1

ОК, вот мой путь решения. первым я получаю последнее событие ID из моей БД, и я плюс 1 до последнего идентификатора

<?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; 
?> 

тогда я отправить идентификатор для JS

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

и это все.

+1

Вы называете это отдельно, когда идете создавать новое событие? Может ли пользователь создать несколько событий перед сохранением в базе данных? – fletch

+0

Да, пользователь может создать более одного события до его сохранения в базе данных. –

+0

Без обратной передачи, как вы заполняете каждый новый '$ idActual', который вам нужен? Я бы подумал, что в большинстве случаев вам нужно сделать вызов AJAX, чтобы получить необходимый идентификатор. – fletch

4

Я нашел решение! При создании любого события, положи стоимость создания эксклюзивной идентификатор здесь:

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" 
     ); 

После этого этот слушатель Append ID в структуре DOM:

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

Чтобы получить все события на поле:

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

Теперь у вас есть массив событий, и все события пронумерованы в структуре DOM!

0

Я рекомендую вам установить парам идентификатор в prameters, подобное этому:

$('#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

Прозрачный раствор

Когда вы запрашиваете события с Ajax также назначить «id», который поступает из БД

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); 
      } 
      }); 
      } 
     } 
0

Как отмечает Флетч, вы должны сгенерировать идентификатор для каждого нового события в БД или с кодом соединения DB в порядке для обеспечения параллелизма.Брайан Виллафанье использует подобный подход, но вот мое решение.

Для 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'); 
} 

Это отправляет дату в формате YYYY-MM-DD, поскольку я использую только события AllDay, но вы можете обновить соответствующим образом. Отправка только start приведет к эпохе с миллисекундами.

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 можно проверить, как показано на рисунке here. У кого-то есть небольшой шанс вставить еще одно событие между вашей проверкой вставки и последней строки, но если вы не столкнулись с дорожным делом, все будет в порядке.

0

Каждое событие уже имеет свой собственный уникальный идентификатор:

eventClick: function(event){ 
    alert(event._id); 
} 
Смежные вопросы