4

カレンダーボタンだけでなく、自分のドロップダウンの変更でも、イベント検索の基準を定義するため、完全なカレンダーのイベントを再フェッチする必要があります。これまで、を使用してドロップダウンの値を渡すことができた唯一の方法ですが$.ajax、現在、イベントはカレンダーに到達しません。機能を完全に理解していないようで、何かが足りません。

$(function () {
    InitializeCalendar();

    $("#ProjectId").change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });

    $("#JobId").change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });

    $("#StoreId").change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });

    $("#OrderType").change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });

    $("#ShippingId").change(function () {
        $('#calendar').fullCalendar('refetchEvents');
    });
});

function InitializeCalendar() {
    $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay'
        },
        events: function (start, end) {
            $.ajax({
                url: '/Calendar/GetEvents/',
                dataType: 'json',
                data: {
                    start: Math.round(start.getTime() / 1000),
                    end: Math.round(end.getTime() / 1000),
                    projectId: $("#ProjectId option:selected").val(),
                    storeId: $("#StoreId option:selected").val(),
                    jobId: $("#JobId option:selected").val(),
                    orderType: $("#OrderType option:selected").val(),
                    shippingId: $("#ShippingId option:selected").val()
                }

                **SOMETHING MISSING HERE** 

                //this puts calendar into infinite loop
                //$('#calendar').fullCalendar('refetchEvents');
            });
        }
    });
}

コントローラ:

public JsonResult GetEvents(double start, double end, int? projectId, int? storeId, string orderType, int? shippingId, int? jobId)
{
    // Some code...

    IList<OrderEvent> events = orderDTOs.Select(orderDTO => new OrderEvent {
        id = orderDTO.OrderId,
        title = orderDTO.OrderId.ToString(), 
        start = ToUnixTimespan(orderDTO.CreatedDate), 
        end = ToUnixTimespan(orderDTO.CreatedDate.AddHours(1)), 
        url = "/Order/Search"
    }).ToList();

    return Json(events, JsonRequestBehavior.AllowGet);
}
4

3 に答える 3

1

refetchEventsイベント ajax 呼び出しに呼び出しを入れる必要はないと思います。はそのrefetchEventsajax を再度呼び出します。したがって、無限ループになります。

また、ドロップダウンからカレンダーにデータを送信する方法は問題ないと思います。refetchEventsajax 呼び出しから呼び出しを削除してみて、機能するかどうかを確認してください。

また、必要に応じて、ajax 呼び出しの成功コールバックを使用して、コントローラーから返されたイベントを処理できます。

于 2012-07-16T20:32:31.057 に答える
-2

このようなものがうまくいくはずです。ajax 呼び出しの成功関数を介して完全なカレンダーを再フェッチするだけです。したがって、現在のように無限にではなく、各呼び出しの後にのみ再フェッチする必要があります。

events: function (start, end) {
    $.ajax({
        url: '/Calendar/GetEvents/',
        dataType: 'json',
        data: {
            start: Math.round(start.getTime() / 1000),
            end: Math.round(end.getTime() / 1000),
            projectId: $("#ProjectId option:selected").val(),
            storeId: $("#StoreId option:selected").val(),
            jobId: $("#JobId option:selected").val(),
            orderType: $("#OrderType option:selected").val(),
            shippingId: $("#ShippingId option:selected").val()
        }

       **SOMETHING MISSING HERE**
       success: function(data) {
            $("#calendar").fullCalendar("refetchEvents");
            console.log('successfully refetched events');
       }

       //this puts calendar into infinite loop
       //$('#calendar').fullCalendar('refetchEvents');
    });
于 2013-07-20T09:31:28.200 に答える