「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(三)
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求是最完善的甘特图图表库。在web项目中使用DHTMLX Gantt时开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的自定义能力因此本文仅继续介绍DHTMLX Gantt的自定义用例。在这个系列的文章中您将学习如何使用DHTMLX Gantt组件构建类似jira的项目路线图。在上文中主要介绍了如何实现工作项的自定义图标本文将继续介绍如何实现工作项的自定义对话框窗口、自定义网格列等欢迎持续关注定制指南工作项的自定义对话框窗口在工作项的自定义图标中可以动态更改显示的数值。为此有必要单击所需的图标并在打开的对话框窗口中使用三个按钮进行必要的更改。接下来我们将向您解释如何实现此功能。您需要使用modalbox()方法来显示自定义对话框窗口需要指定一个类型为“number”的输入元素以便更方便地设置值。此窗口还包括保存和取消更改的按钮以及删除图标值和图标本身的按钮。将对话框窗口保存为一个变量以便以后能够访问它并从HTML元素中获取值而无需在屏幕上看到对话框窗口。let modalbox gantt.modalbox({ title: Work Item, text: divlabelValue: input typenumber min0 classitems_value //label/div, buttons: [ { label: Save, css: items_button, value: save }, { label: Cancel, css: items_button, value: cancel }, { label: Delete, css: items_button, value: delete } ],对话框窗口出现在屏幕上之后您应该设置任务属性的值。如果给定日期的任务没有值则将其设置为0。modalbox.querySelector(.items_value).value task.items[clickDate] || 0;在callback()方法中有必要指定在自定义图标的对话框窗口中的每个按钮被点击后应该发生什么save – 从HTML元素中获取值并为自定义图标日期添加/更新该值delete – 检查任务是否有自定义图标日期的值如果有删除该值cancel – 在我们的示例中没有为这个按钮指定逻辑但是仍然将它包含在代码中以便您更容易在这里实现逻辑。callback: function (result) { switch (result) { case save: const newValue modalbox.querySelector(.items_value).value; task.items[clickDate] newValue; gantt.updateTask(task.id); break; case cancel: break; case delete: if (task.items[clickDate]) { delete task.items[clickDate]; gantt.updateTask(task.id); } break; } }自定义网格列路线图的网格部分还包括一些应该从编程角度解释的专栏本文中我们讨论的是三列——物品、故事点和状态。我们从“Items” 一栏开始每个任务的工作项总数可以在相应的网格列中找到。由于在列配置中使用了模板函数因此可以显示这些值。应该提到的是“故事点”列中的值是有依赖关系的没有描述点的任务也应该有0个工作项。name: items, label: Items, align: center, width: 40, resize: true, template: function (task) { let total 0; if (task.story_points task.items) { for (item in task.items) { total task.items[item]; } } return total; }为了简化故事点的编辑您需要向相应的网格列添加一个内联编辑器。const storyPointsEditor { type: number, map_to: story_points, min: 0 }; ... { name: story_points, label: Story Points, align: center, width: 40, resize: true, editor: storyPointsEditor, template: function (task) { return task.story_points || 0; } },路线图网格中的“Status” 列显示任务的进度条可以通过单击所需的状态选项动态更改此参数状态数据存储在一个单独的数组中gantt.serverList(status, [ { key: 0, label: Pending }, { key: 1, label: Ready to Start }, { key: 2, label: In Progress }, { key: 3, label: Done }, { key: 4, label: On Review }, { key: 5, label: Accepted }, ]);lightbox配置有一个“select”类型的标准部分(即这种类型的部分在甘特图中可用该列表取自数组gantt.serverList( status )。{ name: status, height: 22, map_to: status, type: select, options: gantt.serverList(status) },要在网格中显示自定义状态值必须在列配置中使用模板选项。然后添加主HTML元素所有其他元素都应该放在这里文本状态显示在单元格的顶部。let statusName byId(gantt.serverList(status), task.status); let html div classstatus_columndiv classstatus_name${statusName}/divdiv classstatus_progress配置任务时需要指定状态值而不是状态名。要匹配状态号及其文本请应用自定义byId函数它有助于通过状态名的编号找到所需的状态名。function byId(list, id) { for (var i 0; i list.length; i) { if (list[i].key id) { return list[i].label || ; } } return Pending; }每个任务状态都有一个序号彩色方块的数量由这个序号决定。在编程上它以以下方式实现使用状态遍历数组中的所有元素每次添加一个方形HTML元素。向状态框添加CSS样式以便在状态数小于或与任务状态数相同时为其上色。const statuses gantt.serverList(status); for (var i 1; i statuses.length; i) { const item statuses[i]; let filled ; if (item.key task.status) { filled filled } const el div classbar ${filled}>gantt.attachEvent(onTaskClick, function (id, e) {在方形元素中需要从HTML元素中获取状态号并更改任务对象的状态。之后应该更新任务以呈现更改。最后您需要返回false以便在任务状态改变时不会触发onTaskClick事件。否则甘特图将从单击的行中选择任务而不再选择前一个任务。const statusBar e.target.closest(.status_progress .bar); if (statusBar) { const task gantt.getTask(id); task.status statusBar.dataset.status; gantt.updateTask(id); return false; } return true;更多教程内容请下期再见记得点赞关注收藏哦

相关新闻

【JAVA毕设源码分享】基于springboot高校科研管理系统-纵向项目管理的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot高校科研管理系统-纵向项目管理的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/24 20:23:05 阅读更多 →
Windows驱动清理终极指南:Driver Store Explorer完整使用教程

Windows驱动清理终极指南:Driver Store Explorer完整使用教程

Windows驱动清理终极指南:Driver Store Explorer完整使用教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来越少,即使清理了临…

2026/7/24 20:22:05 阅读更多 →
动态行为识别系统:身体指纹技术的原理与应用

动态行为识别系统:身体指纹技术的原理与应用

1. 项目背景与核心价值在生物识别技术快速发展的今天,传统指纹、虹膜等静态生物特征识别方式已经难以满足某些特定场景的安全需求。我们团队经过三年研发,成功构建了一套基于人体动态行为特征的"身体指纹"识别系统——镜像视界(Mir…

2026/7/24 20:22:05 阅读更多 →

最新新闻

python数据可视化技巧的100个练习 -- 42. 销售对比的哑铃点图

python数据可视化技巧的100个练习 -- 42. 销售对比的哑铃点图

重要性★★★★☆ 难度★★★☆☆ 您是一家零售公司的数据分析师。公司希望比较两个季度之间的销售业绩。 公司已向您提供了 Q1 和 Q2 各产品类别的销售数据。 您的任务是创建一个哑铃点图,以直观地表示这两个季度之间每个类别的销售变化。 该图表应清晰显示两个季度的销…

2026/7/24 20:30:07 阅读更多 →
TMSpeech:构建你的私有化实时语音识别工作流

TMSpeech:构建你的私有化实时语音识别工作流

TMSpeech:构建你的私有化实时语音识别工作流 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱?上网课笔记跟不上节奏?TMSpeech是一款完全免费开源的Windows…

2026/7/24 20:30:06 阅读更多 →
抖音无水印下载终极指南:3步轻松保存高清视频

抖音无水印下载终极指南:3步轻松保存高清视频

抖音无水印下载终极指南:3步轻松保存高清视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…

2026/7/24 20:30:06 阅读更多 →
Beyond Compare 5密钥生成终极指南:3种方法实现永久免费激活

Beyond Compare 5密钥生成终极指南:3种方法实现永久免费激活

Beyond Compare 5密钥生成终极指南:3种方法实现永久免费激活 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为业界领先的文件比较工具,其30天评估期结…

2026/7/24 20:30:06 阅读更多 →
御坂翻译器:5分钟开启无障碍Galgame体验的终极实时翻译解决方案

御坂翻译器:5分钟开启无障碍Galgame体验的终极实时翻译解决方案

御坂翻译器:5分钟开启无障碍Galgame体验的终极实时翻译解决方案 【免费下载链接】MisakaTranslator 御坂翻译器—Galgame/文字游戏/漫画多语种实时机翻工具 项目地址: https://gitcode.com/gh_mirrors/mi/MisakaTranslator 你是否因为语言障碍而错过了精彩的…

2026/7/24 20:30:06 阅读更多 →
SolidWorks_焊件设计18_焊件性能优化

SolidWorks_焊件设计18_焊件性能优化

焊件性能优化:大型焊件轻化、简化与重建速度提升全攻略 摘要 在大型机械结构设计中,焊件(Weldment)是承载核心载荷的关键部件。然而,随着焊件尺寸和复杂度的增加,CAD软件(尤其是SolidWorks、Inv…

2026/7/24 20:29:06 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻