2017-02-05 12 views
0

私は完全な予定表Jsライブラリを使用してスケジューリング機能を作成しています。私はselectメソッドを使って、ユーザが日付をクリックするとmodal formを開くことができます。私のコードは、新しく追加されたすべてのイベントをいくつかの甘いものAjaxを使ってデータベースに保存します。Django FullCalendarイベントを永続化させる

    $.ajax({ 
         type:'POST', 
         url:'createEvent/', 
         data:{ 
          name: name, 
          start: start.format("YYYY-MM-DD"), 
          end: end.format("YYYY-MM-DD"), 
          csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() 
         }, 
         sucess:function(){ 
          alert("Event added") 
         } 
        }); 

は、その後、私はいくつかのdjango魔法使用して、対応するイベントをプリントアウトするloadingメソッドを使用しました。その後、ログイン、ログアウト、私はページを更新した場合次に

 $('#calendar').fullCalendar({ 
      loading: function(bool){ 
       if (bool){ 
        {% for object in objects %} 
         var name = "{{ object.name }}"; 
         var start = "{{ object.start }}"; 
         var end = "{{ object.end }}"; 
         var event={id:1 , title: name, start: start+"T14:30", end:end,}; 
         $('#calendar').fullCalendar('renderEvent', event, true); 
        {% endfor %} 
       } 
      }, 
     }); 

を、イベントが持続します!しかし、私はバグを発見しました。ご存じのように、フルカレンダーには、数ヶ月間に渡るボタンが装備されています。残念なことに、このボタンをクリックするたびに、リフレッシュのように動作し、カレンダーにrender重複イベントが発生します。あなたが推測したように、ボタンをクリックするたびにloadingメソッド内のfor loopが実行されます。 javascriptには、ページが最初に読み込まれたときにのみloading部分のみを実行するように指定するにはどうすればよいですか?私はこのようなものを試した:

$(window).onload = function() { 
     $('#calendar').fullCalendar({ 
      loading: function(bool){ 
       if (bool){ 
        {% for object in objects %} 
         var name = "{{ object.name }}"; 
         var start = "{{ object.start }}"; 
         var end = "{{ object.end }}"; 
         var event={id:1 , title: name, start: start+"T14:30", end:end,}; 
         $('#calendar').fullCalendar('renderEvent', event, true); 
        {% endfor %} 
       } 
      }, 
     }); 
    }; 

しかし、それは動作しません。何か案は?

答えて

0

ローディング機能を正しく使用していないようです。

参照:https://fullcalendar.io/docs/event_data/loading/

$('#calendar').fullCalendar({ 
    ... 
    events: CAL_AJAX_FEED, 
}); 

あなたはむしろテンプレートで静的にそれをレンダリングするよりも、データを供給するジャンゴでのAJAXのビューが必要になります。そのジャンゴビューからJSONレスポンスを返すべきです。

from django.http import JsonResponse 

def cal_ajax_feed(request): 
    return JsonResponse({'foo':'bar'}) 
関連する問題