如何禁用DHTMLxGantt滚动时的数据刷新以保留任务链接?
解决DHTMLxGantt任务链接滚动后丢失的问题
核心原因
DHTMLxGantt在滚动、视图切换或数据更新时,会重新渲染可见区域的任务栏。你手动附加的DOM元素(比如href链接)会被重置,因为Gantt是基于原始任务数据重新生成DOM结构的。
推荐实现方式:使用任务文本模板
不要手动修改DOM,利用Gantt内置的task_text模板函数,在模板中直接生成带链接的HTML。这样每次任务渲染时都会自动生成链接,滚动后也不会丢失:
gantt.templates.task_text = function(start, end, task) { // 按需为特定任务添加链接,比如通过自定义字段判断 if (task.need_link) { // 假设用need_link标记需要加链接的任务 return `<a href="${task.link_url}" target="_blank" style="color: inherit; text-decoration: underline;">${task.text}</a>`; } // 其他任务正常显示文本 return task.text; };
关于禁用滚动刷新的说明
DHTMLxGantt没有提供禁用滚动时重新渲染的设置。按需渲染是它优化大数量任务性能的核心机制,强行禁用会导致大量DOM元素常驻内存,引发严重性能问题,不建议尝试。
备选方案:直接传入带HTML的任务文本
如果不想用模板,也可以直接在API返回的任务数据中,将text字段设为带链接的HTML,同时开启Gantt的HTML解析功能:
// 允许任务文本解析HTML内容 gantt.config.html_text = true;
API返回的任务数据示例:
{ id: 1, text: '<a href="your-target-url" target="_blank">任务名称</a>', start_date: "2024-05-01", duration: 5, parent: 0 }
这种方式也能保证滚动后链接不会丢失,因为Gantt会直接渲染你传入的HTML结构。
内容的提问来源于stack exchange,提问作者Drazov
相关产品推荐
相关产品推荐

