Получение TextBlocks панели в GoJS
Мне нужна помощь с GoJS. Я работаю с образцом на этой странице в разделе SubGraphExpanderButtons. Например, я хочу установить красный цвет всех текстовых блоков в группе, нажав SubGraphExpanderButton
, я добавить click
обработчик события
...
$("SubGraphExpanderButton", {
margin: new go.Margin(0, 3, 5, 0),
click: function(e, button) {
...
}
}),
...
В соответствии со структурой образца я пытаюсь получить все TextBlock что-то вроде
button.panel.panel.elt(1)
поскольку кнопка находится на горизонтальной панели, горизонтальная панель находится на вертикальной панели, а на вертикальной панели находится заполнитель, содержащий все текстовые блоки. Но это неправильно. Я даже не уверен, что этот селектор дает мне именно заполнитель, и даже если это так, я не могу получить вложенные элементы из получаемого объекта. Похоже, я неправильно понял саму концепцию GoJS.
Итак, мой вопрос, как я могу получить все группы TextBlock s?
1 ответ
Узлы-члены и ссылки группы не находятся в визуальном дереве содержащей группы. Каждая часть (включая узлы, ссылки и группы) представляет собой объект верхнего уровня с GraphObject.panel, равным нулю. Таким образом, вы не можете перемещаться по визуальному дереву, которое является иерархией панелей и графических объектов, чтобы добраться до любого узла-члена. Ни наоборот, от члена узла через .panel
попасть в содержащую группу.
Вместо этого, из группы вы можете использовать Group.memberParts, чтобы добраться до ее узлов и ссылок, если таковые имеются. А из узла или ссылки вы можете посмотреть на Part.conistingGroup, чтобы добраться до содержащей его группы, если таковая имеется.
button.part.memberParts.each(function(member) {
if (member instanceof go.Node) { . . . }
})
Дополнительную информацию можно найти по адресу https://forum.nwoods.com/t/getting-textblocks-of-panel-in-gojs/8009.