#apache-flex #user-interface #hierarchy
#apache-гибкий #пользовательский интерфейс #иерархия
Вопрос:
У меня есть общая функция для построения строк элементов управления (каждая строка состоит из ползунков, переключателей, кнопок сброса, текстового отображения) и т.д., А также некоторые функциональные возможности для изменения базовых данных на основе этих
Поскольку я не хотел писать конкретный код для каждой строки, у меня был написан код, с помощью которого я могу определить строку, в которой произошло событие mouseevent, и хотя строка обращается к каждому отдельному элементу управления
Используемая иерархия — TitleWindow (часть всплывающего окна)-> контейнер для скинов-> HGroup-> control
Когда я отслеживаю радиокнопку, я получаю следующий путь Electric_Modify.TitleWindowSkin2620._TitleWindowSkin_Group1.contents.contentGroup.0.RadioButton2645
‘0’ перед радиокнопкой обозначает первый идентификатор Hgroup-> с именем 0
Я попытался получить доступ к переключателю следующим образом — 5-й элемент в HGroup ((this.contentGroup.getChildAt(строка) как группа).getChildAt(4) как RadioButton).включено = false;
и получите сообщение «Не удается получить доступ к свойству или методу с нулевой ссылкой на объект» в этой строке. Как я должен перемещаться по иерархии, чтобы добраться до элемента?
Комментарии:
1. Я не знаю, что за приложение вы создаете со всеми этими вопросами, но я могу сказать вам прямо сейчас, что вам, похоже, нравятся чрезмерно сложные решения довольно простой проблемы. Есть ли причина, по которой вы не используете группу данных или список? средства визуализации элементов? Подход, основанный на данных? разделение проблем?
2. @J_A_X Возможно, ему платят за каждую написанную строку кода.
3. @Jason Towne, Хаха, если бы только это было так, я бы знал слишком много миллионеров : P
4. @Jason: Хотел бы я, чтобы это было так!!
Ответ №1:
Вы должны использовать getElementAt(…), а не getChildAt(…).
Функции get element представляют иерархию элементов «более высокого уровня», которая необходима для упрощения создания обложек.
((this.getElementAt(row) as IVisualElementContainer).getElementAt(4) as RadioButton).enabled = false;
Это должно выглядеть примерно так, но точная иерархия зависит от того, что находится в вашем приложении.
Ответ №2:
@drkstr
Спасибо за ваш вклад… Я подумал об альтернативном подходе, который сработал для меня…Я наметил родительский элемент HGroup через
parent1=hgrp.parent; и затем ссылается на эти кнопки следующим образом
((parent1.getChildAt(строка) как группа).getChildAt(4) как радиокнопка)
Это работает как мечта … Я полагаю, ваше предложение позволило бы мне перейти через промежуточные слои
@J_A_X / @Constantiner: Спасибо за предложение. Я понятия не имею, почему мы не продумали и не пошли по пути DataGroup. На первый взгляд кажется проще… мы приступили к созданию элементов управления пользовательского интерфейса в MXML, последовательно размещая элементы управления, и когда дело дошло до придания ему универсального характера, мы буквально воспроизвели подход MXML в AS. Начиналось легко, пока это не вызвало проблем, подобных описанным выше. Мы исправим это, чтобы улучшить подход, когда будем обновлять версии. Пока это работает