1

通常のイベントと終日のイベントの両方を含むフルカレンダーがあります。

allDay-eventsをアジェンダビューの通常のイベントにドラッグできないようにしたい。

終日のイベントには、開始時刻と終了時刻の両方が最初から設定されているため、終了時刻がnullかどうかを確認できません。

おそらく、eventDrop関数にこれをブロックする方法がありますか?

4

4 に答える 4

3

このフィドルを確認してください:http://jsfiddle.net/100thGear/GPx28/

注意すべきいくつかのポイント:

  • コールバックのallDayパラメーターは、イベントのallDayを表していません。それはスロットの終日能力を表します。したがって、週ビューでは、上部のバーはasになり、下のタイムスロットはasになります。eventDropallDaytrueallDayfalse
  • コールバックのeventパラメーターにeventDropは、更新された日付/時刻があります。したがって、イベントをallDayスロットから6:30 AMスロットに移動した場合、このコールバックのイベントの開始は実際には6:30:00になります。そのため、ドラッグされたイベントのallDayパラメーターをドラッグ開始時に変数に格納しました(eventDragStartコールバックを介して)
  • イベントのid属性は、それが繰り返し可能なイベントであるかどうかを決定します。フィドルでは、allDayイベントと通常のイベントの両方が同じIDを持っていたため、ドラッグ操作が複雑になります。可能であれば、これは避けてください。
  • 最後に、あなたはこれを知っていると思いますが、イベントがドロップされた後の正しいコールバックは、eventDrop単にドロップするだけでなく、呼び出されます。

お役に立てれば!

于 2012-07-06T23:57:41.527 に答える
2

少し遅れましたが、私は同じような問題を抱えていました。私のallDayイベントのいくつかは修正する必要がありましたが、他のイベントは修正しませんでした。私の解決策は、「forceAllDay」と呼ばれる各イベントに対してユーザー定義の値を追加し、それをtrueまたはfalseに設定することでした。

次に、イベントドロップセクションにこれを追加しました:

eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
    if (event.forceAllDay && !allDay) {
        revertFunc();
    } else {
        if (!confirm('Move event?')) {
            revertFunc();
        } else {
            // UPDATE DATABASE
        }
    }
}
于 2013-12-12T12:59:38.890 に答える
0

最新のAPI2.xxに従って、次のように実行できます。

var draggedEventIsAllDay
var eventDragStart = function(ev) {
    draggedEventIsAllDay = ev.allDay;
};

var eventDrop = function(ev, delta, revertFunc, jsEvent, ui, view) {
    var data = delta._data,
        dayDelta = data.days,
        minuteDelta = data.minutes,
        allDay;

    var start = jQuery.fullCalendar.moment(ev.start.format('MM-DD-YYYY'));

    if (start.hasTime()) {
        allDay = false;
    } else {
        allDay = true;
    }


    if (!allDay && draggedEventIsAllDay || allDay && !draggedEventIsAllDay) {
        revertFunc();
    }
};
于 2016-08-23T09:26:46.363 に答える
0

終了時刻が瞬間的にnullであるかどうかを確認できます。それが役に立てば幸い

eventDrop: function(event, delta, revertFunc) {
    var m = $.fullCalendar.moment(event.end);

    if (!m.hasTime() && !event.allDay)
        revertFunc(); 
    else {

    }
},
于 2018-01-21T02:33:04.863 に答える