簡體   English   中英

事件的 ID(Fullcalendar)

[英]ID of an event (Fullcalendar)

我需要為 Fullcalendar 的每個事件添加一個 id,我發現這個http://arshaw.com/fullcalendar/docs/event_data/Event_Object/但我不知道如何,這個 id 是
每個事件都是唯一的,因為我將事件保存在 Mysql 數據庫中。 謝謝

我找到了解決方案! 創建任何事件時,請將您的唯一 ID 放在這里:

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 結構中附加 ID:

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

要在一個字段上獲取所有事件:

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

現在你有事件數組,所有事件都在 DOM 結構中編號!

正如 fletch 所提到的,您必須為 DB 中的每個新事件或使用 DB 連接代碼生成 ID,以允許並發。 Bryan Villafañe 使用類似的方法,但這是我的解決方案。

對於 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 將返回行的 ID,然后將其分配給本地創建的事件並呈現。 這是數據庫功能:

$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 參數並進行插入。 如果插入成功,我將獲取最后一個插入行 ID 並將其返回給 JS。 否則返回錯誤消息。

我使用的SQLite3我的數據庫,但如MySQL的最后插入的行可以檢查在這里 有人在您的插入和最后一行 ID 檢查之間插入另一個事件的可能性很小,但除非您正在處理高流量事務,否則您會沒事的。

Event 對象上的 ID 是一個可選字段。 您可以返回並使用您想從服務器端腳本返回的任何內容。 您可以從字段組合中創建復合 ID...'calendarName_eventID' 或僅使用數據庫中的 eventID。 不過,不確定您想像這樣公開主鍵(這本身就是另一個問題)。 長話短說……您可以創建自己的 ID 值。

你可能想看看這里: https : //code.google.com/p/fullcalendar/issues/detail?id=713

該線程處理刪除日歷事件,但說明了原始發布者如何在他/她的保存事件的回調中設置 ID。

希望這有幫助。

好的,這是我的解決方法。 首先,我從我的數據庫中獲取最后一個 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 ?>";

就是這樣。

清除解決方案是

當您使用 Ajax 獲取事件時,還會分配來自 DB 的“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);
             }
           });
           }
        }

每個事件都有自己的唯一 ID:

eventClick: function(event){
    alert(event._id);
}

我建議您在與此類似的參數中設置參數 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); } });

建議使用 setProp,因為 v5 希望這對其他人有所幫助,我意識到它正在更改 arg.event._def.id attr 中的 id。

我在我的 ajax 成功中使用了它;

          success: function (response_data) {
        arg.event.setProp("id", response_data['eventId'])}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM