具有相似名称的计划程序任务会覆盖其前一个任务
Scheduler task with similar name override its previous one
我的页面中有一个调度程序。它正在从嵌套 API JSON 文件填充数据。它工作得几乎完美,但数据不断被新数据覆盖,例如,如果我创建了一个名为 Modeling 的任务,则不会显示前一个同名任务。我该如何解决这个问题
下面是我的代码,非常感谢任何帮助
HTML
<div id="my_scheduler" style='width:1585px; height:325px;'></div>
javascript
function prepareData(rawData){
var ganttData = { data: [], links: []};
for(var i = 0; i < rawData.data.length; i++){
var task = {}
gantt.mixin(task, rawData.data[i]);
gantt.mixin(task, rawData.data[i].task);
task.text = task.name;
ganttData.data.push(task);
}
return ganttData;
}
gantt.config.columns = [
{name: "official_name", align: "left", template: function(data){
if(data.assign_to) return data.assign_to.official_name;
}, label: "Assign To", tree:true, width: 200},
{name: "text", label: "Task", align: "left", hide:true, width: 100},
{name: "start_date", width: 90},
{name: "end_date", align: "left", label: "End Date", width: 90},
{name: "duration", width: 50}
];
gantt.config.xml_date = "%Y-%m-%d";
function initializeGantt(content_id) {
scheduler = gantt.init("my_scheduler", new Date('2017, 01, 01'), new Date('2017, 12, 31'));
data = localStorage.getItem("id");
$.get("/dashboard/ganttchart_list/"+data+"/?format=json", function(result) { gantt.parse(prepareData(result)); });
API
{
"data": [
{
"assign_to": {
"id": 3,
"employee_id": "28141",
"official_name": "Hal Jordan",
},
"task": {
"id": 1,
"name": "Modeling",
"description": "3d modeling work"
},
"start_date": "2017-06-15",
"end_date": "2017-06-19"
},
{
"assign_to": {
"id": 3,
"employee_id": "28144",
"official_name": "Kyle Rayner",
},
"task": {
"id": 8,
"name": "Composting",
"description": null
},
"start_date": "2017-06-01",
"end_date": "2017-06-08"
},
{
"assign_to": {
"id": 2,
"employee_id": "28142",
"official_name": "John Stewart",
},
"task": {
"id": 8,
"name": "Modelling",
"description": null
},
"start_date": "2017-06-22",
"end_date": "2017-06-25"
}
]
}
很可能你最终在你的数组中有多个具有相同 id 的项目,例如你有两个 "task" 的项目:{ "id":8 , ...}
由于此值用作加载到甘特图中的项目的 ID,您将得到以下信息:
ganttData.data.push({ "id":8, "text":"Composting",...});
ganttData.data.push({ "id":8, "text":"Modelling",...});
虽然 ganttData.data 数组将包含这两个项目,但具有相同 id 属性 值的项目将在加载到甘特图中后合并为一个。
如果您希望这些项目单独显示,您需要为它们提供唯一的 ID,并可能将原始 item.task.id 保存到其他 属性 中,以便能够 link 记录到来自后端的原始任务,例如
function prepareData(rawData){
var ganttData = { data: [], links: []};
for(var i = 0; i < rawData.data.length; i++){
var task = {}
gantt.mixin(task, rawData.data[i]);
gantt.mixin(task, rawData.data[i].task);
task.text = task.name;
task.taskId = task.id;//!!!important
task.id = gantt.uid();//!!!important
ganttData.data.push(task);
}
return ganttData;
}
我的页面中有一个调度程序。它正在从嵌套 API JSON 文件填充数据。它工作得几乎完美,但数据不断被新数据覆盖,例如,如果我创建了一个名为 Modeling 的任务,则不会显示前一个同名任务。我该如何解决这个问题
下面是我的代码,非常感谢任何帮助
HTML
<div id="my_scheduler" style='width:1585px; height:325px;'></div>
javascript
function prepareData(rawData){
var ganttData = { data: [], links: []};
for(var i = 0; i < rawData.data.length; i++){
var task = {}
gantt.mixin(task, rawData.data[i]);
gantt.mixin(task, rawData.data[i].task);
task.text = task.name;
ganttData.data.push(task);
}
return ganttData;
}
gantt.config.columns = [
{name: "official_name", align: "left", template: function(data){
if(data.assign_to) return data.assign_to.official_name;
}, label: "Assign To", tree:true, width: 200},
{name: "text", label: "Task", align: "left", hide:true, width: 100},
{name: "start_date", width: 90},
{name: "end_date", align: "left", label: "End Date", width: 90},
{name: "duration", width: 50}
];
gantt.config.xml_date = "%Y-%m-%d";
function initializeGantt(content_id) {
scheduler = gantt.init("my_scheduler", new Date('2017, 01, 01'), new Date('2017, 12, 31'));
data = localStorage.getItem("id");
$.get("/dashboard/ganttchart_list/"+data+"/?format=json", function(result) { gantt.parse(prepareData(result)); });
API
{
"data": [
{
"assign_to": {
"id": 3,
"employee_id": "28141",
"official_name": "Hal Jordan",
},
"task": {
"id": 1,
"name": "Modeling",
"description": "3d modeling work"
},
"start_date": "2017-06-15",
"end_date": "2017-06-19"
},
{
"assign_to": {
"id": 3,
"employee_id": "28144",
"official_name": "Kyle Rayner",
},
"task": {
"id": 8,
"name": "Composting",
"description": null
},
"start_date": "2017-06-01",
"end_date": "2017-06-08"
},
{
"assign_to": {
"id": 2,
"employee_id": "28142",
"official_name": "John Stewart",
},
"task": {
"id": 8,
"name": "Modelling",
"description": null
},
"start_date": "2017-06-22",
"end_date": "2017-06-25"
}
]
}
很可能你最终在你的数组中有多个具有相同 id 的项目,例如你有两个 "task" 的项目:{ "id":8 , ...}
由于此值用作加载到甘特图中的项目的 ID,您将得到以下信息:
ganttData.data.push({ "id":8, "text":"Composting",...});
ganttData.data.push({ "id":8, "text":"Modelling",...});
虽然 ganttData.data 数组将包含这两个项目,但具有相同 id 属性 值的项目将在加载到甘特图中后合并为一个。
如果您希望这些项目单独显示,您需要为它们提供唯一的 ID,并可能将原始 item.task.id 保存到其他 属性 中,以便能够 link 记录到来自后端的原始任务,例如
function prepareData(rawData){
var ganttData = { data: [], links: []};
for(var i = 0; i < rawData.data.length; i++){
var task = {}
gantt.mixin(task, rawData.data[i]);
gantt.mixin(task, rawData.data[i].task);
task.text = task.name;
task.taskId = task.id;//!!!important
task.id = gantt.uid();//!!!important
ganttData.data.push(task);
}
return ganttData;
}