我正在使用 DHTMLX 调度程序。基本上我正在做的是向服务器发出 AJAX GET 请求以获取我的数据,然后使用他们的方法 addEvent() 加载事件。所以我有相当多的数据要加载到调度程序上,我知道这可能需要时间。我可以将 20 到 2500 个事件添加到调度程序中,我对服务器使用个性化查询来优化每个视图的请求。GET/AJAX 请求不需要时间。但是在日历中加载事件需要很长时间,不仅需要很长时间,还会冻结浏览器。我以为事件正在加载但没有显示,因为它很慢所以我创建了一个进度条。但后来我意识到浏览器在执行循环时挂起,所以我什至看不到我实现的微调器。
谁能帮我这个?有没有办法让我的代码更好,或者至少让微调器在加载事件时显示?所以用户知道发生了什么吗?当我在 for each 中添加一个 console.log 时,我还可以在控制台中看到它在递增,并且它的速度非常快,考虑到它可能需要 1 秒到 35 秒左右之间的大量数据,而且我好吧,我只是希望它没有挂起。
这是我的代码:
$.each( data, function( key, event ) {
var eventObj = scheduler.getEvent(event.Activity_Id_int);
var type = typeof(me.scheduler.getEvent(event.Activity_Id_int));
if(typeof(me.scheduler.getEvent(event.Activity_Id_int)) === 'undefined')
{
var text;
if(event.Titre != null)
text = event.Titre + " " + event.Ressource + '-' + event.Employe;
else
text = event.Ressource + ' - ' + event.Employe;
me.scheduler.addEvent({
id: event.Activity_Id_int,
start_date: Global.formatDateTime(event.Local_Start_DateTime),
end_date: Global.formatDateTime(event.Local_End_DateTime),
text : text,
color: Global.RandGandB_To_SchedulerRGB(event.Color_R,event.Color_G,event.Color_B),
desc_act : event.Desc_Act,
priorite: event.Priorite,
ressource_id: event.Resource_Id,
ressource_name: event.Ressource,
textColor: "black"
});
}
n++;
progress.update(n/data.length * 100);
console.log("Loading these events y'all"); });
另外,当我更改视图时,我并没有完全清除事件,而是检查请求中的事件是否已经加载,这极大地提高了性能,但即使我没有添加任何事件,也就是如果我回到视图,它仍然挂起我已经加载了所有事件。