项目管理工具dhtmlxGantt甘特图入门教程(十):服务器端数据集成(上)

news2024/11/20 11:31:33

这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。

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

DhtmlxGantt正版试用下载(qun:764148812)icon-default.png?t=N176https://www.evget.com/product/4213/download

客户端

1)调用load方法,其中作为参数指定以JSON格式返回甘特图数据的URL。

2)使用以下两种方式之一创建DataProcessor实例:

  • 初始化DataProcessor并将其附加到dhtmlxGantt对象:
gantt.init("gantt_here");
gantt.load("apiUrl");
 
// keep the order of the lines below
var dp = new gantt.dataProcessor("apiUrl");
dp.init(gantt);
dp.setTransactionMode("REST");
  • 调用createDataProcessor方法并传递一个带有配置选项的对象作为其参数:

var dp = gantt.createDataProcessor({
      url: "apiUrl",
      mode: "REST"
});

创建数据处理器

1.使用预定义的请求模式之一,如:

var dp = gantt.createDataProcessor({
   url: "/api",
   mode: "REST"
});

位置:

  • url-服务器端的URL
  • mode-向服务器发送数据的模式:“JSON”|“REST-JSON”|“JSON”|“邮政”|“得到”

2.提供自定义路由器对象:

var dp = gantt.createDataProcessor(router);
  • 其中路由器是一个功能:
// entity - "task"|"link"
// action - "create"|"update"|"delete"
// data - an object with task or link data
// id – the id of a processed object (task or link)
var dp = gantt.createDataProcessor(function(entity, action, data, id) { 
    switch(action) {
        case "create":
           return gantt.ajax.post(
                server + "/" + entity,
                data
           );
        break;
        case "update":
           return gantt.ajax.put(
                 server + "/" + entity + "/" + id,
                 data
            );
        break;
        case "delete":
           return gantt.ajax.del(
                 server + "/" + entity + "/" + id
           );
         break;
   }
});

或是以下结构的对象:

var dp = gantt.createDataProcessor({ 
   task: {
      create: function(data) {},
      update: function(data, id) {},
      delete: function(id) {}
   },
   link: {
      create: function(data) {},
      update: function(data, id) {},
      delete: function(id) {}
   }
});

对象的所有函数都路由器应该返回一个Promise或一个数据响应对象。 这是 dataProcessor应用数据库id并挂钩onAfterUpdate事件所必需的。

outer = function(entity, action, data, id) {
    return new gantt.Promise(function(resolve, reject) {
        // … some logic
        return resolve({tid: databaseId});
    });
}

因此,您可以使用DataProcessor将数据保存在localStorage或任何其他未链接到某个URL的存储中,或者如果有两个不同的服务器(URL)负责创建和删除对象。

请求和响应详细信息

URL由以下规则构成:

  • api/链接/id
  • api/任务/id

其中“api”是您在dataProcessor配置中指定的URL。

可能的请求和响应的列表是:

ACTIONHTTPURLRESPONSE
加载数据GET/apiUrlJSON格式
添加新任务POST/apiUrl/任务{"action":"inserted","tid":"taskId"}
更新任务PUT/apiUrl/task/taskId{“行动”:“更新”}
删除任务DELETE/apiUrl/task/taskId{“行动”:“删除”}
添加新链接POST/apiUrl/链接{"action":"inserted","tid":"linkId"}
更新链接PUT/apiUrl/link/linkId{“行动”:“更新”}
删除链接DELETE/apiUrl/link/linkId{“行动”:“删除”}

请求参数

创建/更新/删除请求将包含客户端任务或链接对象的所有公共属性:

任务:

  • 开始日期 :2017-04-08 00:00:00
  • 持续时间 :4
  • 文本 :任务#2.2
  • 父级 :3
  • 结束日期 :2017-04-12 00:00:00

关联:

  • 来源 :1
  • 目标 :2
  • 类型 :0

笔记:

  • 格式start_date和end_date参数由date_format配置定义。
  • 客户端发送任务或链接对象的所有公共属性。 因此,请求可以包含任意数量的附加参数。
  • 如果您通过向其添加新列/属性来扩展数据模型,则不需要额外的操作来使甘特图将它们发送到后端。

REST-JSON 模式

除了“POST”、“GET”、“REST”和“JSON”事务模式,甘特数据处理器也可以用于“REST-JSON”模式。

gantt.load("apiUrl");
 
var dp = gantt.createDataProcessor({
      url: "/apiUrl",
      mode: "REST-JSON"
});

在REST模式中,数据以以下形式发送到服务器:

Content-Type: application/x-www-form-urlencoded

而在REST-JSON模式下,数据以JSON格式发送:

Content-type: application/json

因此参数作为JSON对象发送,请求有效载荷

  • 任务
{
    "start_date": "20-09-2018 00:00",
    "text": "New task",
    "duration":1,
    "end_date": "21-09-2018 00:00",
    "parent": 0,
    "usage":[{
        {"id":"1", "value":"30"},
        {"id":"2", "value":"20"}
    }]
}
  • 关联
{
    "source": 1,
    "target": 2,
    "type": "0"
}

这种格式使得在任何服务器端平台上处理复杂记录变得更加方便。

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

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

相关文章

考前梳理:PMP®备考之敏捷实践中的五大事件

今天为大家总结了PMP敏捷实践中的五大事件,帮助大家回顾考试重点,大家可以看着下方敏捷实践流程图进行个人构思,后文也会为大家一一剖析其中的重要环节。完整的Scrum敏捷实践框架流程图:一、冲刺计划会议 Sprint Planning1.为即将…

SQP求解器推导与matlab命令(JacobianHessian矩阵)

缩写: SQP(Sequential Quadratic Programming)序列二次规划 NLP 非线性规划问题 matlab代码 matlab中求解器 SQP的认识 《最优化方法及其Matlab程序设计》 书 马昌凤 SQP 知乎 基础知识点 I.Jacobian矩阵 Def: 一阶偏导 II.Hessian矩阵 Def: 二阶偏导 图 三阶…

【SpringCloud+Vue】生成微信二维码及扫码登录--OAuth2

OAuth2 微信登录流程 前端代码实现 后端代码实现 导入依赖 yml 实体类以及返回结果 工具类 微信配置信息 HTTP客户端连接池 JWT 控制层 业务层 持久层 OAuth2 OAuth2是OAuth(Open Authorization,开放授权)协议的延续版本。用来授…

Hinge Loss 和 Zero-One Loss

文章目录Hinge Loss 和 Zero-One LossHinge LossZero-One LossHinge Loss 和 Zero-One Loss 维基百科:https://en.wikipedia.org/wiki/Hinge_loss 图表说明: 纵轴表示固定 t1t1t1 的 Hinge loss(蓝色)和 Zero-One Loss&#xff…

字节5年测试经验,12月无情被辞,划水的兄弟别再这样了····

前言 先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成…

实现一个小程序分享图 wxml2canvas

我们经常会遇上动态生成海报的需求,而在小程序中,生成图片非Canvas莫属。但是在实际工作当中,为了追求效率,我们会不可避免地去使用一些JS插件,而 wxml-to-canvas 就是一款官方推荐且非常优秀的插件,它可以…

图文详解Ansible中的变量及加密

文章目录一、变量命名二、变量级别三、.变量设定和使用方式1.在playbook中直接定义变量2.在文件中定义变量3.使用变量4.设定主机变量和清单变量5.目录设定变量6.用命令覆盖变量7.使用数组设定变量8.注册变量9.事实变量10.魔法变量四、JINJA2模板五、 Ansible的加密控制练习1.用…

I2C总线应用测试程序

参考链接:I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性,需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看,操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…

yunUI组件库解析:图片上传与排序组件yImgPro

yunUI是笔者开源的微信小程序功能库。目前其中包含了一些复杂的功能组件。方便使用。未来它将分为组件、样式、js三者合为一体,但分别提供。 本文所用代码皆来源于组件库中的yImgPro组件。详细代码可至github查看。地址: yunUI 。 npm地址:yu…

Bing+ChatGPT 对传统搜索引擎的降维打击

早些时候申请了新版 Bing 的内测资格,终于收到了通过的邮件。 一天的体验之后,我的感受是:当新版 Bing 具备了 ChatGPT 的聊天能力之后,它的能力不论是对传统搜索引擎,还是 ChatGPT 自身,都将是降维打击。 …

LeetCode 237. 删除链表中的节点

原题链接 难度:middle\color{orange}{middle}middle 题目描述 有一个单链表的 headheadhead,我们想删除它其中的一个节点 nodenodenode。 给你一个需要删除的节点 nodenodenode 。你将 无法访问 第一个节点 headheadhead。 链表的所有值都是 唯一的&…

IoT 边缘集群基于 Kubernetes Events 的告警通知实现(二):进一步配置

上一篇文章 IoT 边缘集群基于 Kubernetes Events 的告警通知实现 目标 告警恢复通知 - 经过评估无法实现原因: 告警和恢复是单独完全不相关的事件, 告警是 Warning 级别, 恢复是 Normal 级别, 要开启恢复, 就会导致所有 Normal Events 都会被发送, 这个数量是很恐怖的; 而且…

【重排重绘】从输入url到浏览器展示页面发生了什么?

目录步骤如下:一、用户在浏览器搜索栏中输入url地址二、浏览器解析域名得到服务器ip地址浏览器解析域名得到服务器ip地址有哪些过程?三、TCP三次握手建立客户端和服务器的连接四、客户端发送HTTP请求获取服务器端的静态资源五、服务器发送HTTP响应报文给…

程序员深度体验一周ChatGPT发现竟然....

程序员深度体验一周ChatGPT发现竟然… 周一打卡上班,老板凑到我跟前:“小李啊,这周有个新需求交给你做一下,给我们的API管理平台新增一个智能Mock的功能…”。我条件反射般的差点脱口而出:“这个需求做不了…”。不过…

【软件测试】资深测试总结的几个自动化测试点,提升跨越一大步......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 自动化的软件测试与…

PostgreSQL查询引擎——SELECT STATEMENTS SelectStmt

SelectStmt: select_no_parens %prec UMINUS| select_with_parens %prec UMINUS select_with_parens:( select_no_parens ) { $$ $2; }| ( select_with_parens ) { $$ $2; } 该规则返回单个SelectStmt节点或它们的树,表示集合操作树(set-operation tree…

JAVA线程池的使用

一、池化思想和JAVA线程池 池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客 )。 线程池是另一种池化思想的运用,把…

MySQL 派生表产生关联索引auto_key0导致SQL非常的慢

相同的SQL在maridb运行0.5秒,在MySQL8.0.26中运行要19秒 官方MySQL在处理子查时,优化器有个优化参数derived_merge,MySQL7开启添加,默认on.很多情况可以自动优化派生表,避免创建临时索引auto_key0和生成临时表数据做…

C++入门:函数重载

目录 一. 函数重载的概念和分类 1.1 什么是函数重载 1.2 函数重载的分类 1.3 关于函数重载的几点注意事项 二. C实现函数重载的底层逻辑(为什么C可以实现函数重载而C语言不能) 2.1 编译器编译程序的过程 2.2 为什么C可以实现函数重载而C语言不能 …

内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程

管家婆软件从网络架构上分两种版本:web(浏览器http端口)访问的版本和客户端(211固定端口sqlserver数据库)访问的版本。公司库管经常用仓库登录管家婆,一旦需要在公司外部登陆访问管家婆客户端,就…