При работе со связями в диаграмме Gantt важно знать, как получить объект или ID связи. Многие методы требуют объект или ID связи в качестве параметра, и пользовательские сценарии работы со связями также зависят от этой информации.
Для получения объекта связи можно использовать метод gantt.getLink
:
gantt.getLink("link1"); //-> {id:"link1", source:1, target:2, type:1}
Чтобы получить все доступные связи в диаграмме, удобно использовать метод gantt.getLinks
:
var links = gantt.getLinks();
Это вернет массив, содержащий все объекты связей.
Связи, связанные с конкретной задачей, можно получить через свойства $source и $target объекта задачи. Эти свойства автоматически генерируются и содержат ID связанных связей:
var taskObj = gantt.getTask("t1");
var sourceLinks = taskObj.$source; //-> ["l1","l4"] - ID исходящих связей var targetLinks = taskObj.$target; //-> ["l5","l8"] - ID входящих связей
task.$source и task.$target являются динамическими свойствами объекта задачи. Они не хранятся в базе данных, но динамически добавляются к объекту задачи после загрузки данных.
const task = gantt.getTask(1);
const source = task.$source;
// Связи, исходящие из задачи,
// где `task #1` выступает в роли предшественника в этих отношениях
source.forEach(function(linkId) {
const link = gantt.getLink(linkId);
console.log(link);
// { id: linkId, source: 1, target: targetTaskId, ...}
});
const target = task.$target;
// Связи, направленные на задачу,
// где `task #1` выступает в роли последователя в этих отношениях
target.forEach(function(linkId) {
const link = gantt.getLink(linkId);
console.log(link);
// { id: linkId, source: sourceTaskId, target: 1, ...}
});
ID связи обычно можно найти в объекте links набора данных.
{
tasks:[...],
links:[
{ id:1, source:1, target:2, type:"1"}, //id связи = 1 { id:2, source:2, target:3, type:"0"}, //id связи = 2 { id:3, source:3, target:4, type:"0"} //id связи = 3 ]
}
Если вам нужно найти ID связи с определенными значениями "target", "source" или "type", вы можете использовать следующий подход:
// Поиск связи от задачи с id=1 к задаче с id=2
var links = gantt.serialize().links; // Возвращает все связи
for(var i=0; i<links.length; i++){ // Перебирает все связи
if ( (links[i].source == 1) && (links[i].target == 2) )
var linkId = links[i].id;
};
Если вам нужно обновить ID связи, можно использовать метод gantt.changeLinkId
:
gantt.changeLinkId(1274, "link14"); // Изменяет ID связи: 1274 -> "link14"
К началу