|
|
|||||
Тонкости Flex и MXML: Наследование
Салют!
Обожаю ActionScript3 и всегда старался обходить стороной MXML, благо решаемые мной задачи это позволяли. Но сегодня я нуждаюсь в создании навороченой утилиты, так что без обилия стандартных UI-компонентов не обойтись. Первым делом я глубоко закопался в MinimalComps потом даже с ASwing познакомился, но в конце концов я для себя понял, что в теории GUI на столько стандартизирован, функционален и дружественен к юзверю, что его вполне удобно "разметить", не делая все вручную. А если еще есть и удобная среда, понимающая разметку, то удобство плавно превращается в удовольствие. Короче, кинул я свой скромный взор в сторону MXML. Некоторое время все было круто, но тут я столкнулся с непонятной задачей. В смысле она вполне себе понятна, если все делать чистым ActionScript3, но мне бы хотелось сохранить возможность использования MXML. Приведу пример: Мне нужен кастомный компонент-контейнер, который будет иметь дочерний контейнер в качестве приемника для элементов. Как я уже писал, ручками такое сделать не проблема. Но как объяснить мои планы MXML-парсеру? Базовый класс: <!-- class MyContainer --> <SomeContainer> <SomeElement /> <OtherContainer id="contentHolder"> <!-- Entry point --> </OtherContainer> </SomeContainer> Ожидаемый дисплейлист (если можно так выразиться в контектсте компонентной модели Flex) |
|
|||||
Какова цель сего действа? От вашего ответа будет зависеть мой ответ.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Пробовал, если речь об addElement. Переопределил все, что с этим связано - размещение, удаление, индексы. Но... На код типа <MyConatiner><SomeControl/></MyContainer> получал намек, что SomeControl не может разместиться в моем контейнере.
Хочу получить MXML`абельный контейнер со своими внутренними контролами, один из которых, будучи тоже контейнером, станет принимать вложенные контролы. По сути моя нужда в том, чтобы сваять ящик, у которого сверху будет ряд переключателей, слева список, а справа - пустой контейнер, в который наследники сего чудо-юдо-класса будут размещать нужные контролы для детального отображения выделенного элемента списка. Такой себе браузер для списка. И вот идея в том, чтобы заставить все это дружить с MXML. Можно конечно подумать над реализацией итем_рендерера, но мне хотелось, чтобы мой наследник контейнера вел себя в MXML-коде, как мудренный контейнер (чтобы мог размещать вложенные элементы не прямиком в себя, а в специальный внутренний вспомогательный контейнер), а не компонент с возможностью настройки отображения. |
|
|||||
Если вот прям железно надо это делать одним компонентом, подходит SkinnableContainer.
В скине SkinnableContainerSkin, сверху и справа от основного контейнера (contentGroup) добавить свои группы-контейнеры, для просмотра или контролов управления. Для отображения данных в списке - SkinnableDataContainer. |
|
|||||
Ну вот ShockWave512 уже и ответил. Наследуйтесь от SkinnableContainer, в наследнике реализуйте логику взаимодействия своих дополнительных элементов, а отображение/позиционирование и т.д. будет реализовываться в скине.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
Огромное спасибо! То, что нужно. Как то сам даже не подумал бы смотреть в сторону SkinnableContainer. Мне казалось, что скины - чисто декоративный элемент. А может еще посоветуете что почитать кроме справочных материалов? Хотелось бы чего то в духе лекций или детального обзора на тему флексовых библиотек, после чего в доки будешь лезть с пониманием дела. Ну и обилие кириллицы приветствуется
|
|
|||||
На английском можно найти ссылки на статьи и видео в документации от Adobe (она все еще актуальна). Дополнительно есть ссылки видео-уроки на http://flex.apache.org/.
Насчет документации на русском, трудно сказать... Вы малость припозднились (лет на шесть/семь) и многие ссылки уже протухли. Можете у меня в блоге поколупасть, я писал несколько статей по скинированию и компонентам, правда практического толка.
__________________
משיח לא בא משיח גם לא מטלפן |
Часовой пояс GMT +4, время: 20:50. |
|
« Предыдущая тема | Следующая тема » |
|
|