イベントを制限して、各イベント内の所定の時間前にのみ削除できるようにしようとしています。私は日付の前にドロップすると、それは完全に動作します。しかし、私が与えられた日の後に落ちると、イベントは消えます。何が欠けていますか?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);
ドラッグ&ドロップしているイベントのサンプルを提供できますか? – ADyson
は、イベントを取得する方法を示すためにいくつかの変更を追加しましたか?これはあなたの意味ですか? – OliverLChapman
"eventAllow"の場合: 'if(dropLocation.start> day){'は潜在的に信頼性がありません。 MomentJsは、標準JSオペレータが適切に動作しない可能性のあるすべてのケースをカバーする日付を比較するための特定のメソッドを提供します。 'if(dropLocation.start.isAfter(day)){'がより正確になります。また、この関数からtrue/falseを明示的に返す必要があります。 if文の代わりに 'return!dropLocation.start.isAfter(day);'を実行するだけで、必要な応答が得られます。これらの変更を試して、まだ問題があるかどうかを確認してください。 – ADyson