Объект/ID Задачи

При работе с данными в диаграмме Ганта важно понимать, как получить объект или ID элемента данных. Многие методы требуют объект данных или ID в качестве параметра, и большинство сценариев, связанных с манипуляцией данными, зависят от ссылки на них.

Для получения более подробной информации о методах работы с задачами в дереве, ознакомьтесь со статьей Задача Родитель/Дети.

Объект Задачи

Чтобы получить объект задачи, используйте метод gantt.getTask:

gantt.getTask("t1");
//->{id:"t1", text:"Task #5", start_date:"02-09-2020", duration:28, 
// progress:0.6, parent:"pr_2", $source:[3,5], $target:[2,1], ...}

Родитель Задачи

Чтобы найти родителя задачи, вы можете использовать метод gantt.getParent или получить доступ к свойству parent из объекта задачи:

gantt.getParent("t1"); //->"pr_2". Если родителя нет, метод возвращает id корня
//или
var taskObj = gantt.getTask("t1"); //-> {id:"t1", text:"Task #5", parent:"pr_2", ...}
var taskParent = taskObj.parent;  //-> "pr_2"

Обратитесь к статье Задача Родитель/Дети для полного списка методов, связанных с деревом.

Связи, Связанные с Задачей

Для получения информации о связях, связанных с определенной задачей, обратитесь к статье Получение объекта/ID связи.

Длительность Задачи

Чтобы рассчитать длительность задачи, используйте метод gantt.calculateDuration:

gantt.calculateDuration(new Date(2020,03,30),new Date (2020,04,02)); // ->16

Имейте в виду, что просто обновление свойства duration в объекте задачи не активирует этот метод. Вам также нужно обновить свойство end_date с помощью метода calculateEndDate. Смотрите пример.

Если опция gantt_work_time_config включена, этот метод рассчитывает длительность в рабочем времени.

Высота Задачи

Чтобы определить высоту DOM-элемента задачи, используйте метод gantt.getTaskBarHeight:

gantt.config.bar_height = 45;
gantt.render();
 
gantt.getTaskBarHeight(1); // -> 45

Метод также может возвращать значение, указанное в свойстве bar_height объекта задачи:

var tasks = {
    data:[
        { id: 1, text: "Project #2", start_date: "01-04-2018", duration: 18, 
            progress: 0.4, open: true, bar_height: "full", row:height: 50 }, 
        { id: 2, text: "Task #1", start_date: "02-04-2018", duration: 8, 
            progress: 0.6, parent: 1, bar_height: 25, row:height: 50 },
    ]
};
gantt.init("gantt_here");
gantt.parse(tasks);
 
gantt.getTaskBarHeight(1); // -> 45
gantt.getTaskBarHeight(2); // -> 25

Если свойство bar_height установлено на "full", высота полосы задачи рассчитывается в пикселях.

Конечная Дата Задачи

Чтобы рассчитать конечную дату задачи, используйте метод gantt.calculateEndDate:

gantt.calculateEndDate(new Date(2020,03,30),48,"hour"); //-> Thu May 07 2020 17:00:00

Когда опция gantt_work_time_config включена, этот метод интерпретирует длительность как рабочее время.

Выбранная Задача

Чтобы получить текущую выбранную задачу, используйте метод gantt.getSelectedId:

gantt.selectTask("t_1"); 
gantt.getSelectedId();  //-> "t_1" - id выбранной задачи

Задачи за Определенный Период

Чтобы получить задачи в определенном временном диапазоне, используйте метод gantt.getTaskByTime:

var tasks = gantt.getTaskByTime(new Date(2020,03,05),new Date(2020,03,15)); 
// tasks - массив объектов задач

Все Задачи в Ганте

Чтобы получить все задачи в диаграмме Ганта, используйте метод gantt.getTaskByTime без параметров:

var tasks = gantt.getTaskByTime();  //возвращает все задачи как массив объектов

Альтернативно, можно использовать метод gantt.serialize.

Связи Определенной Задачи

Чтобы получить доступ к связям, связанным с задачей, обратитесь к свойствам $source и $target. Эти свойства генерируются автоматически и содержат ID связанных связей:

  • $source - ID исходящих связей.
  • $target - ID входящих связей.
var taskObj = gantt.getTask("t1");
 
var sourceLinks = taskObj.$source;  //-> ["l1","l4"] - ID исходящих связей
var targetLinks = taskObj.$target;  //-> ["l5","l8"] - ID входящих связей

Ближайшая Предстоящая Задача

Чтобы найти ближайшую предстоящую задачу, используйте метод gantt.getTaskByTime:

var tasks = gantt.getTaskByTime(new Date(), new Date(9999,1,1));    
// tasks - список всех предстоящих задач
tasks.sort(function(a,b){ return (a.start_date > b.start_date ? 1 : -1); });
// tasks[0] - ближайшее предстоящее событие

ID Задачи

Обычно, ID задачи может быть получен из объекта "data" в наборе данных:

{
    tasks:[
        {id:1, text:"Task #1", start_date:"01-04-2020", duration:18, progress:0.4},
        {id:2, text:"Task #2", start_date:"02-04-2020", duration:8,  progress:0.6}
    ],
    links:[...]
}

Если ID задачи недоступен напрямую, используйте метод gantt.getTaskByTime:

var tasks = gantt.getTaskByTime();   //возвращает все задачи
for(var i=0;i < tasks.length; i++){  //перебирает задачи, чтобы найти нужную
    if (tasks[i].text == "Task #3") 
        var taskId = tasks[i].id;
};

Для улучшения производительности ограничьте возвращаемую коллекцию задач, если вы знаете приблизительный временной диапазон:

var tasks = gantt.getTaskByTime(new Date(2020,05,01),new Date(2020,05,10)); 
for(var i=0;i < tasks.length; i++){  
    if (tasks[i].text == "Task #3") 
        var taskId = tasks[i].id;
};

Изменение ID Задачи

Чтобы изменить ID задачи, используйте метод gantt.changeTaskId:

gantt.changeTaskId("t1", "t11");  //изменяет id задачи с "t1" на "t11"

Открытие/Закрытие Веток Задач

Состояние открытия ветки задачи контролируется свойством task.$open. Это свойство становится доступным после загрузки задач в Гант. После изменения значения изменения появятся после следующей отрисовки:

// развернуть все ветки
gantt.eachTask(function(task){
    task.$open = true;
});
gantt.render();
 
// свернуть все ветки
gantt.eachTask(function(task){
    task.$open = false;
});
gantt.render();

Чтобы открыть или закрыть одну задачу, используйте методы gantt.open или gantt.close. Они обновят состояние задачи и вызовут перерисовку. Для массовых операций более эффективно напрямую изменять свойство task.$open.

Копирование/Вставка Задач

Обратитесь к разделу Как копировать и вставлять задачи для примеров.

К началу