「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(二)

news2024/12/22 18:15:40

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。

DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上下文菜单来补充基于DHTMLX的JavaScript甘特图,来提高用户在任务管理中的效率。考虑到DHTMLX产品的良好互兼容性,DHTMLX Suite的Menu小部件是实现本教程目标的甘特图组件的完美补充。

DHTMLX Gantt最新正式版下载

在上文中(点击这里回顾>>)我们为大家介绍了如何初始化和配置上下文菜单,本文继续介绍如何完成创建/更新/删除以及复制/粘贴操作,更多内容请持续关注我们哟~

创建/更新/删除

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中

首先,我们描述创建/更新/删除部分,本节包含以下嵌套菜单项:

  • 在上面添加sibling

这一项添加了一个同级别的任务,只在被点击的任务顶部:

case "add_sibling_above":
gantt.createTask({ id: gantt.uid(), text: "New task", start_date: task.start_date, duration: 1 }, task.parent, gantt.getTaskIndex(task.id));
break;

为此,需要将任务的父节点指定为第二个参数,并将分支内任务的索引指定为第三个参数。

  • 在下面添加sibling

这个项目添加了一个相同级别的任务,只是在被点击的任务下面。

case "add_sibling_below":
gantt.createTask({ id: gantt.uid(), text: "New task", start_date: task.start_date, duration: 1 }, task.parent, gantt.getTaskIndex(task.id) + 1);
break;

为此需要将任务的父节点指定为第二个参数,并将分支内任务的索引增加1作为第三个参数。

  • 在顶部添加子任务

这个项目在分支的顶部添加一个子任务(在所有其他子任务之上):

case "add_subtask_top":
gantt.createTask({ id: gantt.uid(), text: "New subtask", start_date: task.start_date, duration: 1 }, task.id, 0);
break;

为此将任务ID指定为第二个参数,并将零索引设置为第三个参数。

  • 在底部添加子任务

这个项目在分支的底部添加一个子任务(在所有其他子任务下面):

case "add_subtask_bottom":
gantt.createTask({ id: gantt.uid(), text: "New subtask", start_date: task.start_date, duration: 1 }, task.id);
break;

为此,应该将任务ID指定为第二个参数,并省略第三个参数。以同样的方式,使用甘特图网格区域中的内置“+”按钮添加任务。

  • 编辑任务

此项目打开任务的lightbox(编辑表单)。

case "edit":
gantt.showLightbox(task.id);
break;
  • 删除任务

此项目将在删除任务时打开确认消息框。

case "delete":
gantt.confirm({
text: "Delete task?",
ok: "Yes",
cancel: "No",
callback: function (result) {
if (result && gantt.isTaskExists(task.id)) {
gantt.deleteTask(task.id);
}
}
});
break;

如果用户对消息框中的问题是肯定的,则删除该任务。

复制/粘贴

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中

使用上下文菜单的这一部分,最终用户可以对任务执行剪切、复制和粘贴操作。

  • 剪切

在这里,任务被标记为剪切,以便稍后可以将其移动到其他位置。由于最终用户可能决定不复制任务,而是删除任务,因此有必要检查tasksToCopy数组中是否存在与任务相关的ID。如果带有任务的ID在数组中,则应该将其从数组中删除。

接下来,检查任务ID是否不在tasksToCut数组中,来排除重复的ID。如果具有该ID的任务不在数组中,则将其添加到数组中。之后,您可以使用样式刷新任务来突出显示它。

case "cut":
const copyIndex = tasksToCopy.indexOf(task.id) > -1;
if (copyIndex) {
tasksToCopy.splice(copyIndex, 1)
}
// exclude duplicates
if (tasksToCut.indexOf(task.id) === -1) {
tasksToCut.push(task.id);
}
gantt.refreshTask(task.id);
break;
  • 复制

在这里,任务被标记为复制,以便稍后可以将其添加到其他位置。由于最终用户可能决定不切剪切任务,而是复制任务,因此需要检查任务ID是否在tasksToCut数组中。如果是,则将其从数组中移除。接下来,检查taskToCopy数组中是否缺少任务ID,以排除重复的ID。如果任务ID不在数组中,则将其添加到数组中。之后,重新绘制任务来使用样式突出显示它。

case "copy":
const cutIndex = tasksToCut.indexOf(task.id) > -1;
if (cutIndex) {
tasksToCut.splice(cutIndex, 1)
}
// exclude duplicates
if (tasksToCopy.indexOf(task.id) === -1) {
tasksToCopy.push(task.id);
}
gantt.refreshTask(task.id);
break;
  • 粘贴sibling

这里执行了pasteTasks函数,它复制并移动被标记的任务到调用上下文菜单的任务下面。

case "paste_sibling":
pasteTasks(task.parent, gantt.getTaskIndex(task.id) + 1);
break;
  • 粘贴child

与前面的选项一样,这里执行了pasteTasks函数,它将在调用上下文菜单的任务中复制和移动标记的任务。

case "paste_child":
pasteTasks(task.id);
break;
  • 取消复制/剪切操作

在这里,复制和剪切标记从任务中删除。

case "cancel_paste":
tasksToCopy = [];
tasksToCut = [];
gantt.render();
break;

篇幅有限未完待续,更多内容敬请期待.......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1887902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒懂设计模式--学习笔记(4)【创建篇-工厂方法模式】

目录 3、工厂方法模式3.1 介绍3.2 工厂的多元化与专业化3.3 游戏角色建模(建模)3.4 简单工厂不简单(实例化、初始化)3.5 制定工业制造标准3.6劳动分工 3、工厂方法模式 3.1 介绍 程序设计中的工厂类往往是对对象构造、实例化、初始化过程的封装,而工厂方法&#x…

【AIGC评测体系】大模型评测指标集

大模型评测指标集 (☆)SuperCLUE(1)SuperCLUE-V(中文原生多模态理解测评基准)(2)SuperCLUE-Auto(汽车大模型测评基准)(3)AIGVBench-T2…

昇思25天学习打卡营第6天|关于函数与神经网络梯度相关技术探讨

目录 Python 库及 MindSpore 相关模块和类的导入 函数与计算图 微分函数与梯度计算 Stop Gradient Auxiliary data 神经网络梯度计算 Python 库及 MindSpore 相关模块和类的导入 Python 中的 numpy 库被成功导入,并简称为 np。numpy 在科学计算领域应用广泛&#x…

借教室(题解)

P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;二分前缀和 我们将和质检员那题差不多&#xff0c;只需要将候选人二分即可 #include<bits/stdc.h> using namespace std; #define int long long int n,m; int r[100000…

精准检测,守护安全:可燃气体报警器检测范围探讨

随着工业化进程的加快&#xff0c;易燃易爆气体的使用日益普遍&#xff0c;其安全隐患也愈发凸显。可燃气体报警器作为一种重要的安全监测设备&#xff0c;能够在气体泄漏时及时发出警报&#xff0c;预防火灾和爆炸事故的发生。 在这篇文章中&#xff0c;佰德将对可燃气体报警…

Docker搭建MySQL双主复制详细教程

在此之前需要提前安装好Docker和 Docker Compose 。 一、创建目录 首先创建一个本地数据挂载目录。 mkdir -p master1-data master2-data二、编写docker-compose.yml version: 3.7services:mysql-master1:image: mysql:5.7.36container_name: mysql-master1environment:MYSQL_…

自动驾驶---Motion Planning之多段五次多项式

1 前言 在之前的博客系列文章中和读者朋友们聊过Apollo的 Motion Planning方案: 《自动驾驶---Motion Planning之LaneChange》 《自动驾驶---Motion Planning之Path Boundary》 《自动驾驶---Motion Planning之Speed Boundary》 《自动驾驶---Motion Planning之轨迹Path优化》…

Python中解决os.listdir命令读取文件乱序问题方法

Python中使用对话框批量打开文件时出现乱序问题的解决方法 一、问题描述二、os.listdir读取文件乱序问题解决方法 欢迎学习交流&#xff01; 邮箱&#xff1a; z…1…6.com 网站&#xff1a; https://zephyrhours.github.io/ 一、问题描述 有时候为了方便&#xff0c;我们在进…

Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件

章节内容 上一节完成&#xff1a; HDFS的简介内容HDFS基础原理HDFS读文件流程HDFS写文件流程 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没留下…

从零开始学量化~Ptrade使用教程——安装与登录

PTrade交易系统是一款高净值和机构投资者专业投资软件&#xff0c;为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具&#xff0c;满足用户的各种交易需求和交易场景&#xff0c;帮助用户提高交易效率。 运行环境及安装 操作系统&…

OFDM技术概述8——FBMC

Filter bank multicarrier(FBMC&#xff0c;滤波器组多载波)&#xff0c;是一种类似于OFDM的调制方式&#xff0c;用滤波器抑制子载波的旁瓣大小&#xff0c;使用FFT/IFFT或多相滤波器实现&#xff0c;其应用于5G的主要优势&#xff1a; 子载波信号带限&#xff0c;带外泄漏小…

5.(vue3.x+vite)水平垂直居中实现方式

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 介绍 (1)父级元素设置position:relative; 子级元素设置:position:absolute;left:50%;top:50%;transform: translate(-50%,-50%); 兼容性较好 (1)父级元素设置弹性盒子:display:flex;justify-content:center; a…

LabVIEW幅频特性测试系统

使用LabVIEW软件开发的幅频特性测试系统。该系统整合了Agilent 83732B信号源与Agilent 8563EC频谱仪&#xff0c;通过LabVIEW编程实现自动控制和数据处理&#xff0c;提供了成本效益高、操作简便的解决方案&#xff0c;有效替代了昂贵的专用仪器&#xff0c;提高了测试效率和设…

library source does not match the bytecode for class SpringApplication

library source does not match the bytecode for class SpringApplication 问题描述&#xff1a;springboot源码点进去然后download source后提示标题内容。spring版本5.2.8.RELEASE&#xff0c;springboot版本2.7.18 解决方法&#xff1a;把spring版本改为与boot版本对应的6.…

如何快速去除视频里面的水印字幕等信息?(内附工具)

环境&#xff1a; VSR 需要独显 GPU:N 4070TI 12G 问题描述&#xff1a; 如何快速去除视频里面的水印字幕等信息&#xff1f; 解决方案&#xff1a; 1.打开AI工具VSR&#xff0c;打了要处理的视频 2.右侧滑块调整绿色选框&#xff0c;选中要去的字幕或者水印 这次测试右…

维克日记 v0.4.2:开发者友好的数字化笔记工具

维克日记&#xff0c;专为技术开发者和笔记爱好者设计的数字化笔记工具&#xff0c;以其强大的功能和灵活的配置赢得了用户的好评。软件采用Markdown语法&#xff0c;提供实时预览功能&#xff0c;让您的笔记编辑更加高效和直观。维克日记的用户界面简洁而功能齐全&#xff0c;…

k8s 中间件

1. zookeeper 是的&#xff0c;Zookeeper 和 Kafka 经常一起使用&#xff0c;Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。 项目背景 假设我们有一个分布式数据处理系统&#xff0c;该系统需要高吞吐量的实…

Webpack: 剖析插件基本形态与架构逻辑

概述 Webpack 对外提供了 Loader 与 Plugin 两种扩展方式&#xff0c;其中 Loader 职责比较单一&#xff0c;开发方法比较简单容易理解&#xff1b;Plugin 则功能强大&#xff0c;借助 Webpack 数量庞大的 Hook&#xff0c;我们几乎能改写 Webpack 所有特性&#xff0c;但也伴…

改变图像中特定区域的颜色

背景与原理 再训练施工即系模型中&#xff0c;发现大量施工机械都是黄色的&#xff0c;我需要把它们换成蓝色的&#xff0c;以增强模型使用可靠性。 目前没有尝试深度学习算法&#xff0c;只是简单的进行了处理。 核心目的&#xff1a;通过人工标注与opencv的结合&#xff0…

Cybervadis认证是什么?

Cybervadis认证是一种全面且深入的网络安全评估和认证服务&#xff0c;旨在帮助组织提高其网络安全实践的成熟度&#xff0c;并有效应对不断变化的网络威胁和攻击。以下是关于Cybervadis认证的一些关键信息&#xff1a; 认证目的&#xff1a; 评估和验证组织在网络安全方面的能…