2013-04-03 8 views
10

Fullcalendarのすべてのイベントにidを追加する必要がありますが、これはhttp://arshaw.com/fullcalendar/docs/event_data/Event_Object/ですが、私はこのIDがどのように1つのイベントごとに一意であるかはわかりません。
Mysqlデータベースのイベント。ありがとうイベントのID(Fullcalendar)

+0

は、このIDは一意ではありませんが。フルカレンダーでイベントを入力するときは、必ず1つのイベントごとにIDを与えることができますが、必須ではありません。 –

+0

しかし、後で私は選択されたイベントを編集し、それを行うためにIDを必要とするので、私は一意のidを必要とします。 –

答えて

1

イベントオブジェクトのIDはオプションのフィールドです。サーバー側のスクリプトから戻ってくるものを返却して使用することができます。 ... 'calendarName_eventID'フィールドの組み合わせから複合IDを作成することも、データベースからeventIDを単に使用することもできます。しかし、そのようなプライマリキーを公開したいのかどうかは分かりませんが(これは別の問題です)。あなたは自分のID値を作成することができます。カレンダーイベントを削除するとhttps://code.google.com/p/fullcalendar/issues/detail?id=713

スレッド箱を、しかし、元のポスターは、彼/彼女はセーブイベントからのコールバックにIDを設定した方法を示しています。

あなたはここを見てしたい場合があります。

希望します。

+0

ありがとうございましたが、投稿が古すぎると思われます。その理由は、それが私のためにはうまくいきません。 –

1

OK、ここが私の解決方法です。 は、最初に私はその後、私はJS

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

にIDを送信し、それはそれだ最後の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; 
?> 

を私のDBと私プラス1から最後のidイベントを取得します。

+1

新しいイベントを作成するときにこれを別途呼び出していますか?ユーザーはデータベースに保存する前に複数のイベントを作成できますか? – fletch

+0

はいユーザは複数のイベントをデータベースに保存する前に作成することができます –

+0

ポストバックがなければ、新しい '$ idActual'をどのように作成していますか?ほとんどの場合、必要なIDを取得するために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" 
     ); 

をこのリスナーは、DOM構造にIDを追加した後:

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

フィールド上のすべてのイベントを取得するには:

console.log(calendar.fullCalendar('clientEvents')); 
あなたがここにあなたのuniqe IDを入れて、任意のイベントを作成

イベントの配列があり、すべてのイベントにDOM構造の番号が付けられました。

0

私はこの1つに類似prametersでの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); 
 
    } 
 
});

0

透明な溶液が

であるあなたはアヤックスとのイベントも割り当てるフェッチする場合DBから来る「id」その

に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}); 
    }); 
をentry.idイベントfletchは述べているように、あなたが順番にDBまたはDB接続コードでそれぞれの新しいイベントのためのIDを生成する必要が

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

をクリックします並行処理を可能にします。BryanVillafañ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形式として日付を送信していますが、適切に更新することができます。 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; 

ここでは、2つのPOSTパラメータをチェックし、挿入を行います。挿入が成功した場合は、最後の挿入行IDを取得してJSに返します。それ以外の場合は、エラーメッセージが返されます。

DB用にSQLite3を使用していますが、最後に挿入されたMySQL用の行は、hereのように確認できます。あなたのインサートと最後の行IDのチェックの間に別のイベントを挿入する小さなチャンスがありますが、交通量が多い場合を除き、OKです。

0

各イベントは、すでに独自のIDがあります。ドキュメントに記載されているように、繰り返しイベントが同じイベントIDを持っている必要があるため

eventClick: function(event){ 
    alert(event._id); 
} 
関連する問題