「实战应用」如何用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/9/19 8:09:55 阅读更多 →
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/9/18 1:18:01 阅读更多 →
动态行为识别系统:身体指纹技术的原理与应用

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

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

2026/9/18 7:16:15 阅读更多 →

最新新闻

大模型呼叫中心:AI如何重塑企业客服体验

大模型呼叫中心:AI如何重塑企业客服体验

1. 项目背景与行业现状去年夏天,我亲眼目睹了一家电商客服团队在618大促期间的崩溃场景:300个坐席同时接听,平均等待时长仍超过8分钟,客户投诉率激增40%。这个案例让我深刻意识到,传统呼叫中心模式已经走到了变革的临界…

2026/9/19 8:09:38 阅读更多 →
agent-browser 实时视口流(Live Streaming)协议与接入指南:WebSocket 推帧、远程输入与带宽控制

agent-browser 实时视口流(Live Streaming)协议与接入指南:WebSocket 推帧、远程输入与带宽控制

agent-browser 实时视口流(Live Streaming)协议与接入指南:WebSocket 推帧、远程输入与带宽控制 【免费下载链接】agent-browser Browser automation CLI for AI agents 项目地址: https://gitcode.com/gh_mirrors/agen/agent-browser …

2026/9/19 8:09:38 阅读更多 →
2026年AI商业落地白皮书:行业场景与技术栈解析

2026年AI商业落地白皮书:行业场景与技术栈解析

1. 项目背景与核心价值春节假期往往是企业进行年度复盘和战略规划的关键窗口期。这份白皮书选择在春节前夕发布,正是瞄准了企业决策者在这个时间段特有的"年度总结来年规划"双重需求。作为连续多年跟踪AI技术商业化的专业报告,2026年版特别聚焦…

2026/9/19 8:09:38 阅读更多 →
Node.js 24.4.1 (Current) 安全发布深度解析:修复 V8 RapidHash HashDoS 与 Windows 路径遍历绕过

Node.js 24.4.1 (Current) 安全发布深度解析:修复 V8 RapidHash HashDoS 与 Windows 路径遍历绕过

Node.js 24.4.1 (Current) 安全发布深度解析:修复 V8 RapidHash HashDoS 与 Windows 路径遍历绕过 【免费下载链接】nodejs.org The Node.js Website 项目地址: https://gitcode.com/GitHub_Trending/no/nodejs.org 本文围绕 nodejs.org 仓库收录的 Node.js …

2026/9/19 8:09:38 阅读更多 →
oh-my-openagent 文档漂移修正实战:F2 审计修复清单与模型匹配链的源码级校准

oh-my-openagent 文档漂移修正实战:F2 审计修复清单与模型匹配链的源码级校准

oh-my-openagent 文档漂移修正实战:F2 审计修复清单与模型匹配链的源码级校准 【免费下载链接】oh-my-openagent OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering. 项目地址: https://gitcode.com/g…

2026/9/19 8:09:38 阅读更多 →
Slate 事件处理实战:通过 onKeyDown 定制富文本编辑器的交互行为

Slate 事件处理实战:通过 onKeyDown 定制富文本编辑器的交互行为

Slate 事件处理实战:通过 onKeyDown 定制富文本编辑器的交互行为 【免费下载链接】slate A completely customizable framework for building rich text editors. (Currently in beta.) 项目地址: https://gitcode.com/gh_mirrors/sl/slate 导读 本文聚焦 S…

2026/9/19 8:08:37 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →