FullCalendar-没有带有addEventSource的标准字段

时间:2019-06-21 09:27:29

标签: asp.net json fullcalendar fullcalendar-3

使用ASP.NET从CodeBehind中获取JSON和其他“无标准”字段。

将“ obj”传递给addEventSource时,我正确获取了“标准”标题,开始,结束,颜色,类名。

问题是我想使用“ 事件”和“ eventRender ”代替使用“ addEventSource ”来处理“无标准”字段,这是行不通的。

是否可以将对象或JSON传递给“ 事件”?

我还尝试使用“ docd ”(none parseJSON字符串)在日历中未显示任何结果。使用FullCalendar 3

例如。

 events: obj, 
    eventRender: function(event, element) {
        Console.log(info.event.extendedProps.PrjectID)
    }

这是请求Ajax:

 $.ajax({
                type: "POST",
                url: "Calender.aspx/GetTimeData",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ 'year': year, 'month': month, 'projectID': projectid }),
                dataType: "json"

            }).done(function (doc) {
                var events = [];
                docd = doc.d;
                obj = $.parseJSON(doc.d);
              }
                 });

其他参数:

ProjectID,UserID,WorkTypeID,Signed

Json:

  [{"Signed":1,"ProjectID":39,"WorkTypeid":1,"UserID":97,"id":719627,"start":"2019-01-01T07:00:00","end":"2019-01-01T15:00:00","title":"Test Title ","color":"#607d8b","className":null}]

*********************更新1 *********************

编辑了代码,在全日历环境中实施时,ajax请求可以正常工作,帖子不会出现在日历中,“ eventRender ”也不会出现在日历中没有触发。

        $('#calendar').fullCalendar({

            loading: function (bool) {
                //LoadEvents();
                //alert('events are being rendered'); // Add your script to show loading
            },
            eventAfterAllRender: function (view) {
                //alert('all events are rendered'); // remove your loading 

            },
            navLinks: true,
            lazyFetching: false,
            height: "auto",
            aspectRatio: 2,
            weekends: true,
            weekNumbers: true,
            displayEventEnd: true,
            showNonCurrentDates: false,
            weekLabel: "V",
            allLocales: true,
            locale: "sv",
            header: false,
            //header: {
            //    //left: 'prev,next today',
            //    left: '',
            //    center: '',
            //    right: 'month,agendaWeek,agendaDay,listMonth'
            //},
            viewRender: function (element, view) {
                var title = view.title;
                $("#CalendarHeadTitle").html(title);
                //element.find('.fc-title').append("-test-"); 
            },
            dayClick: function (date, jsEvent, view) {
                $("#sDate, #eDate").val(moment(date).format("YYYY-MM-DD"));
                $('.modal').modal('show');
            },
            eventClick: function (info) {
                $('.modal').modal('show');
            },
            eventDrop: function (event, delta, revertFunc) {

                //TODO: Implement - call to move!

                if (!confirm("Vill du flytta ")) {
                    revertFunc();
                }
            },

            editable: true,
            events: function (start, end, timezone, callback) {

                $.ajax({
                    type: "POST",
                    url: "Calender.aspx/GetTimeData",
                    contentType: "application/json; charset=utf-8",
                    data: JSON.stringify({ 'year': $("#<%=DdlYear.ClientID%>").val(), 'month': $("#<%=DdlMonth.ClientID%>").val(), 'projectID': $("#<%=DdlProjects.ClientID%>").val() }),
                    dataType: "json"
                }).done(function (doc) {
                    var events = $.parseJSON(doc.d);
                    console.log(doc.d);
                    callback(events); //this provided callback function passes the event data back to fullCalendar
                });
            },
            eventRender: function (event, element) {
                console.log('event render action');
            }
        });

1 个答案:

答案 0 :(得分:1)

我认为您正在混淆fullCalendar 3和fullCalendar 4的语法和功能。它们是very different

Console.log(info.event.extendedProps.PrjectID)

将失败,因为

a)您尚未在函数参数中定义info变量(因此,尽管您没有提到一个变量,但仍应收到控制台错误),并且

b)即使您修复了该错误,我也强烈怀疑(根据您用于eventRender函数的签名以及您广泛使用jQuery的事实),您实际上正在使用fullCalendar 3,其event object没有“ extendedProps”属性。

如果我的假设是正确的,那么我会期望的

console.log(event.ProjectID);

输出所需数据。


P.S。您的代码显示在上下文之外,因此我不确定您如何加载事件,但是您不需要在日历环境之外进行AJAX调用然后传递的过程生成的数组稍后发送到日历。而是使用fullCalendar的内置功能之一处理动态事件源。在您的情况下,events-as-a-function选项可能是最合适的。 这是推荐的将数据连接到日历的方法。

您可以这样实现:

events: function( start, end, timezone, callback ) {
  $.ajax({
    type: "POST",
    url: "Calender.aspx/GetTimeData",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({ 'year': year, 'month': month, 'projectID': projectid }),
    dataType: "json"
  }).done(function (doc) {
    var events = $.parseJSON(doc.d);
    callback(events); //this provided callback function passes the event data back to fullCalendar
  });
}

FullCalendar每次需要新事件时都会运行此代码(例如,当日历加载时,以及每当用户更改日历视图以涵盖尚未获取事件的日期范围时)。如您所见,fullCalendar通过回调参数为您提供了startend日期,您可以将它们直接传递给服务器,以帮助它过滤返回的事件列表以覆盖所需的日期范围。您的代码当前接受“月”和“年”,因此可以从开始日期中获取它们,但是,如果您使用的不是“月”视图,则这不够灵活。