2017-04-25 10 views
0

イベントを制限して、各イベント内の所定の時間前にのみ削除できるようにしようとしています。私は日付の前にドロップすると、それは完全に動作します。しかし、私が与えられた日の後に落ちると、イベントは消えます。何が欠けていますか?ASP.NET MVCを使用してカレンダーを作成しています。fullCalendar eventAllowを使用して、指定したDateTimeに基づいてイベントを制限する

マイコード:

 $("#calendar") 
     .fullCalendar({ 
      header: { 
       left: "agendaWeek month", 
       center: "title", 
       right: "prev, today, next" 
      }, 
      defaultView: "agendaWeek", 
      //click on a day in the month view to go to that week 
      dayClick: function (date, jsEvent, view) { 
       if (view.name === "month") { 
        $("#calendar").fullCalendar("changeView", "agendaWeek"); 
        $("#calendar").fullCalendar("gotoDate", date); 
       } 
      }, 
      editable: true, 
      timeFormat: "H:mm", 
      droppable: true, 
      timezone: "Europe/London", 
      eventLimit: true, 
      eventSources: [ 

       "/Home/GetCalendar" 
      ], 
      dragRevertDuration: 0, 
      allDaySlot: false, 
      minTime: "07:00:00", 
      firstDay: 1, 
      aspectRatio: 1.97, 
      //this moves events from tray to calendar 
      drop: function (date, jsEvent, ui, resourceId) { 
       UpdateEvent($(this).attr("uniqueId"), date); 
       $(this).remove(); 
      }, 
      eventDragStop: function (event, jsEvent, ui, view) { 
       //if the event is hovering over the tray 
       if (isEventOverDiv(jsEvent.clientX, jsEvent.clientY)) { 
        $("#calendar").fullCalendar("removeEvents", event.uniqueId); 
        //adds to the panel 
        UpdateEvent(event.uniqueId, ""); 
       } 
      }, 
      //adds description underneath title 
      eventRender: function (event, element) { 
       if (event.location !== "") { 
        element.find(".fc-content").append(event.location); 
       } else { 
        element.find(".fc-content").append(event.assignmentName + "<p>" + event.moduleName + "</p>"); 
       } 
       element.find(".fc-content").qtip({content: { 
        text: event.details 
       }}); 
      }, 
      //this sends a pop up to confirm the drop - probably don't need all the time 
      eventDrop: function (event, delta, revertFunc, jsEvent, ui, view) { 
       if (confirm("Confirm move?")) { 
        UpdateEvent(event.uniqueId, event.start); 
       } else { 
        revertFunc(); 
       } 
       //UpdateEvent(event.uniqueId, event.start); 
      }, 
      eventAllow: function (dropLocation, draggedEvent) { 
       var day = moment(draggedEvent.dueDate); 
       if (dropLocation.start > day) { 
        return false; 
       } 
      }, 
      eventClick: function (event) { 
       $.ajax({ 
        type: "GET", 
        url: "/Home/EditEventView", 
        data: { eventId: event.uniqueId }, 
        success: function (response) { 
         ModalControl("#editEventModal"); 
         $("#editEventModal").html(response); 
        } 
       }); 
      }, 
      theme: true 
     }); 

編集:

私のイベントはasp.net(MVC)とJSONを使ってフィードをマイカレンダーに渡されます。いくつかの文脈では、このアプリは大学生向けのカレンダー用です。私はエンティティフレームワークを使用してデータベースからフェッチしませんでしたが、基本的にはイベントのリストに値を設定し、次に新しいリストを渡します。 コード:

  var newRows = rows.Select(e => new 
     { 
      uniqueId = e.EventId, 
      title = e.Title, 
      start = e.StartTime, 
      end = e.EndTime, 
      details = e.Details, 
      location = e.Location, 
      className = e.ClassName, 
      editable = e.Editable, 
      module = e.Module.ModuleId, 
      assignment = e.Assignment.AssignmentId, 
      assignmentName = e.Assignment.Title, 
      moduleName = e.Module.ModuleName, 
      color = e.Module.Color, 
      dueDate = e.DueDate 
     }).ToList(); 
     return Json(newRows, JsonRequestBehavior.AllowGet); 
+0

ドラッグ&ドロップしているイベントのサンプルを提供できますか? – ADyson

+0

は、イベントを取得する方法を示すためにいくつかの変更を追加しましたか?これはあなたの意味ですか? – OliverLChapman

+0

"eventAllow"の場合: 'if(dropLocation.start> day){'は潜在的に信頼性がありません。 MomentJsは、標準JSオペレータが適切に動作しない可能性のあるすべてのケースをカバーする日付を比較するための特定のメソッドを提供します。 'if(dropLocation.start.isAfter(day)){'がより正確になります。また、この関数からtrue/falseを明示的に返す必要があります。 if文の代わりに 'return!dropLocation.start.isAfter(day);'を実行するだけで、必要な応答が得られます。これらの変更を試して、まだ問題があるかどうかを確認してください。 – ADyson

答えて

0

修正が見つかりました。基本的に私は外部イベントを使用していたので、作成したdivをサイドのトレイからカレンダーにドラッグできるようにするJavascriptメソッドがありました。私はクラスのドラッグ可能なクラスのカレンダー内で競合するクラスのドラッグ可能なクラスを使用していたので、混乱していました。トレイアイテムを「外部」にするときに使用するクラスの名前を変更しました。これは問題を修正したようです。

function EnableDragging() { 
    $(".external").each(function() { 
    $(this).draggable({ 
     zIndex: 999, 
     revert: true, 
     revertDuration: 0 
    }); 
    }); 
}