在添加大量事件(几百个)时,我们在DHTMLX Scheduler中发现了一个奇怪的问题。想象一下,这些事件都在Jan-Mar的日期范围内。如果用户当前正在查看该日期范围,则添加事件的代码大约需要15秒才能运行。但是,如果用户正在查看,例如Mar-May,那么相同的代码段会立即运行。不仅如此,但在代码立即运行后,您可以立即滚动到Jan-Mar范围并查看所有200个事件;他们渲染不到一秒钟。
我们认为问题必须类似于在添加每个事件后由Scheduler完成的完全重绘。目前,我们已经添加了一个变通方法,即我们将用户视图的日期更改为遥远的未来,添加所有事件,然后将其日期更改回原来的状态。然而,这似乎是一个黑客,我们宁愿有一个选项,如" scheduler.config.suppress_repaint"我们可以设置为" true"同时添加事件。
有这样的事吗?我们无法在Scheduler文档中找到任何提及此类内容的内容。任何帮助非常感谢。
答案 0 :(得分:1)
没有内置解决方案,当前版本的dhtmlxScheduler在向可见区域添加或加载大量事件时工作缓慢。
但是如果你想添加一个配置,你可以覆盖在添加事件时触发重绘的方法,尽管它仍然有点黑客。 代码migth看起来如下(把它放在dhtmlxscheduler.js脚本之后的某个地方):
(function(){
var updated = scheduler.event_updated;
//override a method that triggers event repaint
scheduler.event_updated = function(){
// if config is set - do nothing
if(this.config.suppress_repaint)
return false;
// call original implementation otherwise
return updated.apply(scheduler, arguments);
};
})();
然后在您的代码中,您将能够按照以下方式使用配置:
scheduler.config.suppress_repaint = true;
//adding events...
scheduler.config.suppress_repaint = false;
scheduler.setCurrentView();//full redraw
答案 1 :(得分:1)
要一次添加很多事件,可以使用scheduler.parse而不是scheduler.addEvent
此代码将在添加每个事件后重新显示调度程序
//slow
for (var i=1; i<100; i++)
scheduler.addEvent({ id:i });
这个只会重新调度一次调度程序
//fast
var data = [];
for (var i=1; i<100; i++)
data.push({ id:i });
scheduler.parse(data, "json");