2

$('#calendar').fullCalendar('updateEvent ',events[i]); 私の ajax の成功呼び出しで(最後のコード スニペットを確認してください)

これは私の関数呼び出しの構造です:

eventReceive 関数内で addEventSource を呼び出しているため、要素がカレンダーにドラッグされると、これが削除され、定期的なイベントが追加されます。

eventReceive : function(event) {
    ...
     $('#calendar').fullCalendar('removeEvents', event._id);
    $('#calendar').fullCalendar(  'addEventSource',function(start, end, status,  callback) {    

addEventSource 内では、イベントがドロップされた曜日を確認し、同じ日の次の日に複製します。

$('#calendar').fullCalendar( 'addEventSource',function(start, end, status,  callback) {
  var start_date = event.start.toDate();
  var stop_date = new Date("2017-01-15"); // for testing purposes to avoid filling up database with too many entries
  var events = [];
  ...
    for (loop = start_date.getTime(); (loop <= end._d.getTime()) && (loop <= stop_date); loop = loop + (24 * 60 * 60 * 1000)) { 
       ...
       var test_date = new Date(loop);
       var momentOfDate = moment(test_date);
       var formattedStart = momentOfDate.format("YYYY-MM-DDTHH:mm:ss");
       ...
        if (test_date.getDay() == event.start.weekday()) {
              events.push({
                                title: event.title,
                                start: formattedStart,
                                end: // same procedure for end as start
                                parent_id : // some variable
                                id: // some unique variable,
                                tDuration : event.tDuration,
                                dow : ''
          });
        } //if          
     } // for loop
     callback(events);

コールバックの後、新しく作成されたイベントをデータベースに追加したいと思います。そして、これはうまく機能します。私が追加したすべての定期的なイベントはデータベースにあります。関数呼び出しですが、イベントを移動したときにデータベースが更新されるように、ページをリロードする必要があります。これは ajax 呼び出しです。

for (i = 0 ; i < events.length-1 ; i++) {
        var duration = events[i].tDuration;
        $.ajax({
            url: 'process.php',
            data: 'type=new&title='+events[i].title+'&startdate='+events[i].start+'&duration='+duration+'&enddate='+events[i].end+'&dow='+events[i].dow,
            type: 'POST',
            dataType: 'json',
            success: function(response){
                //location.reload(); WORKS but requires reload
                  $('#calendar').fullCalendar('updateEvent',events[i]); // generates typeError but needed in order modify recurring events

                            },
            error: function(e){
                    alert('error');
                    console.log(e.responseText);
                }
            })
        }

この状況で私は何をしますか?単一のイベントを問題なく追加し、エラーなしで同じバージョンの ajax を実行できます。eventReceive 関数で引数として渡されたイベントを使用する代わりに、自分の「イベント」配列のイベントにアクセスしようとすると問題が発生します。電話。しかし、私は複数のイベントを追加しているので、私がやっているように思われる方法でそれを行うことを余儀なくされています.

ソロイベントのコード (WORKS!):

 eventReceive : function(event) {
            var title = event.title;
            var start = event.start.format();
            var end = event.end.format();
            var duration = event.tDuration;
            var dow ='';
            $.ajax({
                url: 'process.php',
                data: 'type=new&title='+title+'&startdate='+start+'&duration='+duration+'&enddate='+end+'&dow='+dow,
                type: 'POST',
                dataType: 'json',
                success: function(response){
                    event.id = response.eventid;
                    $('#calendar').fullCalendar('updateEvent',event);
                },
                error: function(e){
                    alert('error');
                    console.log(e.responseText);
                }
            });

削除された試行 1 cus は、機能する解決策を自分で見つけました

4

2 に答える 2

-2

だから私はこれにしばらく苦労してきましたが、最終的に最良の解決策を見つけました。定期的なイベントでは addEventSource 関数を使用しないでください。コールバック関数で混乱が生じすぎます。for ループを作成し、イベントの新しい varr を定義してプロパティを追加し、$('#calendar').fullCalendar('renderEvent',event,true) を使用してイベントをカレンダーに追加し、固定してから ajax() を使用します。データベースにイベントを追加するために呼び出すので、リフレッシュしてもそのまま残ります。

id_mix = 0;
// TRAVERSE THROUGH TIME
for (loop = start_date.getTime(); (loop <= stop_date); loop = loop + (24 * 60 * 60 * 1000))
...
if (test_date.getDay() == event.start.day()) { // LOOK FOR DAY TO RECUR ON
    var myEvent = { // CREATE EVENT
           title: event.title,
           start: // formatted start date 
           id : id_mix
    }
    id_mix++;
    $.ajax({
         url: 'process.php',
         data: 'type=newR&title='+myEvent.title,
         type: 'POST',
         dataType: 'json',
         async: false,
        success: function(response){
            new_id = response.eventid;
                                },
        error: function(e){
            alert('error');
            console.log(e.responseText);
            }
        });
    myEvent.id = new_id; // GET ID FROM DATABASE, USE ASYNC = FALSE TO RETREIVE VALUE
    $('#calendar').fullCalendar('renderEvent',myEvent,true) // STICK TRUE IN CASE YOU SWAP VIEW


 ...
于 2016-12-22T09:34:32.113 に答える