仅使用一个 json 源渲染完整日历和一个积压工作

render fullcalendar and one backlog with just one json source

我将 Fullcalendar 与积压区域一起使用,最终用户可以在其中查看和拖放日历中的事件 in/out。用户还可以按位置、优先级和负责人(以及更多...)过滤他想看到的事件:这会更新待办事项和日历。这很好用,但到目前为止,积压工作和日历是通过 2 个不同的 ajax 调用更新的。因此,当事件出现在这两个区域时会有延迟,并且代码有点复杂,因为我必须管理两个 Json 流(在客户端和服务器端),尽管它们使用相同的参数和相同的数据库和 table,更不用说第二个 MySQL 连接成本 :-)。我想知道是否可以通过 Ajax 调用仅接收一个包含两个 Json 的数组,并使用一个来呈现日历上的事件并使用另一个来刷新积压列表。

这是我使用的代码:

            eventSources: [
                {
                    url: './ajax/_schedule_json.php',
                    type: 'POST',
                    data: function() {
                        return {
                            location_id: $('#location_id').val(),
                            priority_id: $('#priority_id').val(),
                            responsible_id: $('#responsible_id').val(),
                            ...
                        };
                    },
                    success: function(data) {  },
                    fail: function(data) { }
                }
            ],

谢谢!

其实这很容易。假设您在服务器端的脚本生成两个 json(事件和积压)的数组,您只需要打开文件 fullcalendar.js 并搜索:

                success: function(events) {
                    events = events || [];
                    var res = applyAll(success, this, arguments);
                    if ($.isArray(res)) {
                        events = res;
                    }
                    callback(events);
                }

修改第一行和第二行如下:

                success: function(json) { // Modified
                    events = json.events || []; // Modified
                    var res = applyAll(success, this, arguments);
                    if ($.isArray(res)) {
                        events = res;
                    }
                    callback(events);
                }

然后您可以在主 javascript 文件中使用第二个 json:

            eventSources: [
                {
                    ...
                    success: function(data) { 
                        $.each(data.backlog, function (i, item) {
                            // do whatever you want with the backlog
                        });
                    }
                }
            ],