FullCalendar:使用包含动态数量的事件源的JSON提要

时间:2014-04-16 16:33:00

标签: javascript json fullcalendar

我有一个案例需要在日历上显示多个eventSource,但在运行时才知道源的数量。我已经创建了一个javascript函数,其中包含对PHP脚本的AJAX调用以创建有效的JSON提要(使用在线工具验证),并且我试图将该JSON数据放入日历的初始化中。我已经使用FullCalendar 1.6.4和2.0.0尝试过它并且它不会显示任何事件或抛出任何错误。奇怪的是我可以将JSON提要的字符串化版本复制到eventSources中并且它可以工作。有任何想法吗?

这是字符串化的JSON数据:

 [
  {
    "url": "/s/events.php?e=7",
    "type": "GET",
    "color": "#ffcc00",
    "textColor": "#000000"
  },
  {
    "url": "/s/events.php?e=59",
    "type": "GET",
    "color": "#ff6600",
    "textColor": "#ffffff"
  }
 ]

使用JSON数据继承FullCalendar初始化代码(dataSources未进行字符串化):

 function loadCal(dataSources) {
    $('#calendar').fullCalendar({
        eventSources: [
            dataSources // Here's the JSON data
        ],
        editable: true,
        ...
 }

我尝试过使用字符串版本的dataSources,导致网址无法使用(例如,test.com / [%7B%22url%22:%20%22 / s / events.php?e = 7%22,%22type%22:%20%22GET%22%22color%22:%20%22)

我对其他方法的建议持开放态度。感谢。

这是我按照Bhutto的建议更新的代码:

 function loadCal() {
    $('#calendar').fullCalendar({
        eventSources: [
            function() {
                var userData = $.ajax( {
                    url: '/s/calendar_userdata.php',
                    method: 'GET',
                    dataType: 'json',
                    success: function(userData) {
                        //console.log(userData);
                        var user_count = userData.length;
                        var source = [];
                        var jsonData = [];
                        // Create the sources
                        for (var i = 0; i < user_count; i++)
                        {
                            var uid = userData[i].uid;
                            if(!source[i]) source[i] = [];
                            source[i] = '/s/events.php?e=' + uid;

                            // Add each source to a JSON feed object
                            jsonData.push({
                                url: source[i],
                                type: 'GET',
                                color: userData[i].cal_color,
                                textColor: userData[i].txt_color,
                                error: function() { alert('There was an error loading calendar data.');}
                            });
                        }
console.log(jsonData); // In the console I can see well formed JSON data
                        return jsonData;
                    }
                }); 
            }
        ],
        editable: true,

0 个答案:

没有答案