翻譯|使用教程|編輯:龔雪|2024-07-01 10:40:39.427|閱讀 104 次
概述:本文主要介紹如何用DHTMLX Gantt將上下文菜單集成到JavaScript Gantt圖中,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DHTMLX Gantt是用于跨瀏覽器和跨平臺應(yīng)用程序的功能齊全的Gantt圖表。可滿足項目管理應(yīng)用程序的所有需求,是最完善的甘特圖圖表庫。
DHTMLX Gantt是一個高度可定制的工具,可以與項目管理應(yīng)用程序所需的其他功能相補充。在本文中您將學(xué)習(xí)如何使用自定義上下文菜單來補充基于DHTMLX的JavaScript甘特圖,來提高用戶在任務(wù)管理中的效率。考慮到DHTMLX產(chǎn)品的良好互兼容性,DHTMLX Suite的Menu小部件是實現(xiàn)本教程目標(biāo)的甘特圖組件的完美補充。
在上文中(點擊這里回顧>>)我們?yōu)榇蠹医榻B了如何初始化和配置上下文菜單,本文繼續(xù)介紹如何完成創(chuàng)建/更新/刪除以及復(fù)制/粘貼操作,更多內(nèi)容請持續(xù)關(guān)注我們喲~
首先,我們描述創(chuàng)建/更新/刪除部分,本節(jié)包含以下嵌套菜單項:
這一項添加了一個同級別的任務(wù),只在被點擊的任務(wù)頂部:
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;
為此,需要將任務(wù)的父節(jié)點指定為第二個參數(shù),并將分支內(nèi)任務(wù)的索引指定為第三個參數(shù)。
這個項目添加了一個相同級別的任務(wù),只是在被點擊的任務(wù)下面。
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;
為此需要將任務(wù)的父節(jié)點指定為第二個參數(shù),并將分支內(nèi)任務(wù)的索引增加1作為第三個參數(shù)。
這個項目在分支的頂部添加一個子任務(wù)(在所有其他子任務(wù)之上):
case "add_subtask_top": gantt.createTask({ id: gantt.uid(), text: "New subtask", start_date: task.start_date, duration: 1 }, task.id, 0); break;
為此將任務(wù)ID指定為第二個參數(shù),并將零索引設(shè)置為第三個參數(shù)。
這個項目在分支的底部添加一個子任務(wù)(在所有其他子任務(wù)下面):
case "add_subtask_bottom": gantt.createTask({ id: gantt.uid(), text: "New subtask", start_date: task.start_date, duration: 1 }, task.id); break;
為此,應(yīng)該將任務(wù)ID指定為第二個參數(shù),并省略第三個參數(shù)。以同樣的方式,使用甘特圖網(wǎng)格區(qū)域中的內(nèi)置“+”按鈕添加任務(wù)。
此項目打開任務(wù)的lightbox(編輯表單)。
case "edit":
gantt.showLightbox(task.id);
break;
此項目將在刪除任務(wù)時打開確認(rèn)消息框。
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;
如果用戶對消息框中的問題是肯定的,則刪除該任務(wù)。
使用上下文菜單的這一部分,最終用戶可以對任務(wù)執(zhí)行剪切、復(fù)制和粘貼操作。
在這里,任務(wù)被標(biāo)記為剪切,以便稍后可以將其移動到其他位置。由于最終用戶可能決定不復(fù)制任務(wù),而是刪除任務(wù),因此有必要檢查tasksToCopy數(shù)組中是否存在與任務(wù)相關(guān)的ID。如果帶有任務(wù)的ID在數(shù)組中,則應(yīng)該將其從數(shù)組中刪除。
接下來,檢查任務(wù)ID是否不在tasksToCut數(shù)組中,來排除重復(fù)的ID。如果具有該ID的任務(wù)不在數(shù)組中,則將其添加到數(shù)組中。之后,您可以使用樣式刷新任務(wù)來突出顯示它。
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;
在這里,任務(wù)被標(biāo)記為復(fù)制,以便稍后可以將其添加到其他位置。由于最終用戶可能決定不切剪切任務(wù),而是復(fù)制任務(wù),因此需要檢查任務(wù)ID是否在tasksToCut數(shù)組中。如果是,則將其從數(shù)組中移除。接下來,檢查taskToCopy數(shù)組中是否缺少任務(wù)ID,以排除重復(fù)的ID。如果任務(wù)ID不在數(shù)組中,則將其添加到數(shù)組中。之后,重新繪制任務(wù)來使用樣式突出顯示它。
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;
這里執(zhí)行了pasteTasks函數(shù),它復(fù)制并移動被標(biāo)記的任務(wù)到調(diào)用上下文菜單的任務(wù)下面。
case "paste_sibling": pasteTasks(task.parent, gantt.getTaskIndex(task.id) + 1); break;
與前面的選項一樣,這里執(zhí)行了pasteTasks函數(shù),它將在調(diào)用上下文菜單的任務(wù)中復(fù)制和移動標(biāo)記的任務(wù)。
case "paste_child": pasteTasks(task.id); break;
在這里,復(fù)制和剪切標(biāo)記從任務(wù)中刪除。
case "cancel_paste": tasksToCopy = []; tasksToCut = []; gantt.render(); break;
篇幅有限未完待續(xù),更多內(nèi)容敬請期待.......
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)