Можно ли контролировать дубликаты ссылок в GOJS?
Я реализую диаграмму GOJS что-то, как показано в ссылке ниже
http://gojs.net/latest/samples/treeMapper.html
мой вопрос: возможно ли запретить дублирование ссылок, если какой-либо элемент слева / справа уже имеет ссылку, связанную с ним?
Основываясь на вашем первоначальном ответе, я обновил код для nodeTemplate, как показано ниже
myDiagram.nodeTemplate =
$(TreeNode,
{ movable: false }, // user cannot move an individual node
// no Adornment: instead change panel background color by binding to Node.isSelected
{ selectionAdorned: false },
{ fromLinkable: true, toLinkable: true,fromMaxLinks: 1,toMaxLinks:1 }, // user can draw link to and from such tree nodes
$("TreeExpanderButton", // support expanding/collapsing subtrees
{ width: 14, height: 14,
"ButtonIcon.stroke": "black",
"ButtonIcon.strokeWidth": 2,
"ButtonBorder.fill": "whitesmoke",
"ButtonBorder.stroke": "black",
"ButtonBorder.figure": "Rectangle"
}),
$(go.Panel, "Horizontal",
{ position: new go.Point(16, 0) },
new go.Binding("background", "isSelected", function(s) { return (s ? "lightblue" : "white"); }).ofObject(),
$(go.TextBlock,{ font: '9pt Verdana, sans-serif' },
new go.Binding("text", "Data", function(s) { return s; }))
) // end Horizontal Panel
); // end Node
Примечание. Это не просто реализация дерева. Это дерево реализовано как часть поля "Отображение записей", как показано в ссылке, которой я поделился.
все, что я хочу, это чтобы каждый порт не имел более одной ссылки на диаграмме
то есть контейнерный вагон служебных параметров не должен иметь более одной ссылки на любой другой узел в модели устройства. аналогично, устройство в модели устройства не должно иметь более одной ссылки, поступающей из служебных параметров. аналогично для всех остальных узлов.
1 ответ
Улучшить checkLink
предикат следующим образом:
function checkLink(fn, fp, tn, tp, link) {
// make sure the nodes are inside different Groups
if (fn.containingGroup === null || fn.containingGroup.data.key !== -1) return false;
if (tn.containingGroup === null || tn.containingGroup.data.key !== -2) return false;
// optional limit to a single mapping link per node
if (fn.linksConnected.any(function(l) { return l.category === "Mapping"; })) return false;
if (tn.linksConnected.any(function(l) { return l.category === "Mapping"; })) return false;
return true;
}
И измените шаблон узла, чтобы быть более умным в отношении значений для fromLinkable
а также toLinkable
вместо того, чтобы вслепую устанавливать их в true:
// whether the user can start drawing a link from or to this node depends on which group it's in
new go.Binding("fromLinkable", "group", function(k) { return k === -1; }),
new go.Binding("toLinkable", "group", function(k) { return k === -2; }),
Не беспокойтесь об использовании fromMaxLinks
а также toMaxLinks
свойства, так как это не делает различий между различными видами ссылок, которые использует образец Tree Mapper.
Подробнее об этом читайте по адресу: http://gojs.net/latest/intro/validation.html и http://gojs.net/latest/intro/ports.html.