数据加载
dhtmlxGantt 支持两种数据格式用于加载信息:
要为甘特图填充数据,可以使用 parse 或 load 方法。
gantt.init("gantt_here");
gantt.load("tasks.json");
向 Gantt 提供不正确的数据可能导致其树状结构变为循环结构,从而引发 cyclic reference error。
从对象加载
如果你希望直接从对象加载数据,可以使用 parse 方法:
Loading from an inline data source
var data = {
tasks:[
{id:1, text:"Project #1", start_date:"01-04-2020", duration:18},
{id:2, text:"Task #1", start_date:"02-04-2020", duration:8, parent:1},
{id:3, text:"Task #2", start_date:"11-04-2020", duration:8, parent:1}
]
};
gantt.init("gantt_here");
gantt.parse(data); /*!*/
如 果你的数据对象同时包含 "start_date" 和 "end_date",但日期值仅包含日期部分(如 01-12-2021,没有时间),你可能需要进行额外设置。详情请参阅 任务结束日期显示与包含结束日期。
从服务器加载
客户端
若要从服务器获取数据,可以使用 load 方法:
gantt.html
gantt.init("gantt_here");
gantt.load("data.json"); /*!*/
load 方法会向指定的 URL 发送 AJAX 请求,并期望返回的数据为支持的数据格式之一。 例如:
data.json
{
"tasks":[
{"id":1, "text":"Project #1", "start_date":"01-04-2020", "duration":18},
{"id":2, "text":"Task #1", "start_date":"02-04-2020","duration":8, "parent":1},
{"id":3, "text":"Task #2", "start_date":"11-04-2020","duration":8, "parent":1}
],
"links":[
{"id":1, "source":1, "target":2, "type":"1"},
{"id":2, "source":2, "target":3, "type":"0"}
]
}
你可以在方法的第二个参数中指定格式:"json"、"xml" 或 "oldxml"。
gantt.load("data.xml", "xml");
服务器端
在服务器端,你可以有一个静态数据文件,或编写脚本从数据源收集数据并以响应形式返回。 服务器端的配置取决于你使用的框架。
关于不同平台的详细说明和代码示例,请参阅 Server-Side Integration。
例如,在 Node.js 中,你需要设置一个处理 Gantt 发送 AJAX 数据请求的 URL 路由。
gantt.load("/data");
该路由将生成如下 JSON 响应:
app.get("/data", function(req, res){
db.query("SELECT * FROM gantt_tasks", function(err, rows){
if (err) console.log(err);
db.query("SELECT * FROM gantt_links", function(err, links){
if (err) console.log(err);
for (var i = 0; i < rows.length; i++){
rows[i].start_date = rows[i].start_date.format("YYYY-MM-DD");
rows[i].open = true;
}
res.send({ tasks:rows, links : links });
});
});
});
所有支持的数据格式可在 지원되는 데이터 형식 查看。
任务日期的加载
定义任务计划
在数据中指定任务计划有三种方式:
- start_date + duration
- start_date + end_date
- duration + end_date
未提供的属性会由另外两个属性计算得出。
end_date 优先于 duration。如果同时存在三个参数,Gantt 会忽略 duration,并根据 start 和 end 日期进行计算。例如:
{
"id":"20", "text":"Project #2",
"start_date":"01-04-2025",
"duration":3,
"end_date":"05-04-2025",
"order":10,"progress":0.4,
"type": "project", "open": true
}
// 上述任务实际加载时,duration 会根据 start 和 end 日期计算:
{
"id":"20", "text":"Project #2",
"start_date":"01-04-2025",
"duration":4,
"end_date":"05-04-2025",
"order":10,"progress":0.4,
"type": "project", "open": true
}
使用 ISO 日期格式
Gantt 支持 ISO 日期格式。要启用此功能,需要重写解析和格式化日期的函数:
gantt.templates.parse_date = function(date) {
return new Date(date);
};
gantt.templates.format_date = function(date) {
return date.toISOString();
};
动态更改日期格式
如果你希望动态更改日期格式,应像下面这样更新 parse_date 模板:
var cfg = gantt.config;
var strToDate = gantt.date.str_to_date(cfg.date_format, cfg.server_utc);
gantt.templates.parse_date = function(date){
return strToDate (date);
};