Получение 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.

Другие вопросы по тегам