Fullcalendar,如何动态更改传递给 eventSource 的参数?

Fullcalendar, how to change passed parameter to eventSource dynamically?

我有以下代码来获取事件:

    var eventSource = {
            url: 'api/events/get/byrange',
            data: {
                id: typeof($scope.calendar) == 'undefined' ? '1' : '2'
            }
    };

问题 typeof($scope.calendar) == 'undefined' ? '1' : '2' 只评估了一次,而接下来的所有请求都通过了相同的 id。我怎样才能让它在每次调用时再次计算这个表达式?

你需要写

{
      url: 'api/events/get/byrange',
      data: {
           id: typeof($scope.calendar) == 'undefined' ? '1' : '2'
      }
};

没有在变量中设置它var eventSource。相反,只需将那段代码附加到您的 FullCalendar 初始化中。

但是,我不使用这种方法。相反,我对 returns 对象列表的操作执行 JSON 请求。

Javascript:

$.getJSON('GetCalendar?TrainingId=' + $('#TrainingId').val(), function (response) {
    $('#CalendarWrapper').empty();
    $('#CalendarWrapper').append("<div id='calendar' name='calendar'></div>");
    window.events = response;
    window.calendar = $('#calendar').fullCalendar({
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,agendaWeek,agendaDay' //, basicWeek,basicDay
        },
        selectHelper: true,
        allDaySlot: false,
        slotDuration: '00:15:00',
        buttonIcons: true, // show the prev/next text
        weekNumbers: false,
        editable: true,
        selectOverlap: true,
        unselectAuto: true,
        eventLimit: true, // allow "more" link when too many events
        lang: GetFullCalendarLanguage(),
        aspectRatio: 2.5,
        events: window.events,
    });

    _CalendarBuild = true;
})

操作:

[HttpGet]
public JsonResult GetCalendar(int TrainingId)
{
    var model = QUERY
        .Select(x => new FullCalendar
        {
            title = x.Module.Description + ", " + x.Local.Info,
            Day = x.Day,
            (...)
        })
        .ToList();

    return Json(model, JsonRequestBehavior.AllowGet);
}

完整日历:

public class FullCalendar
{
    public virtual string title { get; set; }

    public virtual string url { get; set; }

    public virtual DateTime Day { get; set; }

    public virtual string start { get; set; }

    public virtual string end { get; set; }

    public virtual bool startEditable { get; set; }
}

当我想再次渲染时,我只需再次调用 javascript(它被放置在一个函数中)。