Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Тонкости Flex и MXML: Наследование (http://www.flasher.ru/forum/showthread.php?t=213051)

elder_Nosferatu 21.06.2016 05:40

Тонкости Flex и MXML: Наследование
 
Салют!
Обожаю ActionScript3 и всегда старался обходить стороной MXML, благо решаемые мной задачи это позволяли. Но сегодня я нуждаюсь в создании навороченой утилиты, так что без обилия стандартных UI-компонентов не обойтись. Первым делом я глубоко закопался в MinimalComps потом даже с ASwing познакомился, но в конце концов я для себя понял, что в теории GUI на столько стандартизирован, функционален и дружественен к юзверю, что его вполне удобно "разметить", не делая все вручную. А если еще есть и удобная среда, понимающая разметку, то удобство плавно превращается в удовольствие. Короче, кинул я свой скромный взор в сторону MXML.

Некоторое время все было круто, но тут я столкнулся с непонятной задачей. В смысле она вполне себе понятна, если все делать чистым ActionScript3, но мне бы хотелось сохранить возможность использования MXML. Приведу пример:
Мне нужен кастомный компонент-контейнер, который будет иметь дочерний контейнер в качестве приемника для элементов. Как я уже писал, ручками такое сделать не проблема. Но как объяснить мои планы MXML-парсеру?

Базовый класс:
Код AS3:

<!-- class MyContainer -->
<SomeContainer>
        <SomeElement />
        <OtherContainer id="contentHolder">
                <!-- Entry point -->
        </OtherContainer>
</SomeContainer>

Использование этого класса
Код AS3:

<!-- class MyTestClass -->
<MyContainer>
        <Bytton label="test btn" />
</MyContainer>

Ожидаемый дисплейлист (если можно так выразиться в контектсте компонентной модели Flex)
Код:

<SomeContainer>
        <SomeElement />
        <OtherContainer id="contentHolder">
                <Bytton label="test btn" />
        </OtherContainer>
</SomeContainer>


KBAC 21.06.2016 12:49

Переопределить addComponent?

alatar 21.06.2016 15:37

Цитата:

Сообщение от elder_Nosferatu (Сообщение 1195020)
Мне нужен кастомный компонент-контейнер, который будет иметь дочерний контейнер в качестве приемника для элементов.

Какова цель сего действа? От вашего ответа будет зависеть мой ответ.

elder_Nosferatu 21.06.2016 16:49

Цитата:

Сообщение от KBAC (Сообщение 1195025)
Переопределить addComponent?

Пробовал, если речь об addElement. Переопределил все, что с этим связано - размещение, удаление, индексы. Но... На код типа <MyConatiner><SomeControl/></MyContainer> получал намек, что SomeControl не может разместиться в моем контейнере.

Цитата:

Сообщение от alatar (Сообщение 1195036)
Какова цель сего действа?

Хочу получить MXML`абельный контейнер со своими внутренними контролами, один из которых, будучи тоже контейнером, станет принимать вложенные контролы. По сути моя нужда в том, чтобы сваять ящик, у которого сверху будет ряд переключателей, слева список, а справа - пустой контейнер, в который наследники сего чудо-юдо-класса будут размещать нужные контролы для детального отображения выделенного элемента списка. Такой себе браузер для списка. И вот идея в том, чтобы заставить все это дружить с MXML. Можно конечно подумать над реализацией итем_рендерера, но мне хотелось, чтобы мой наследник контейнера вел себя в MXML-коде, как мудренный контейнер (чтобы мог размещать вложенные элементы не прямиком в себя, а в специальный внутренний вспомогательный контейнер), а не компонент с возможностью настройки отображения.

ShockWave512 22.06.2016 01:30

Если вот прям железно надо это делать одним компонентом, подходит SkinnableContainer.
В скине SkinnableContainerSkin, сверху и справа от основного контейнера (contentGroup) добавить свои группы-контейнеры, для просмотра или контролов управления.

Для отображения данных в списке - SkinnableDataContainer.

alatar 22.06.2016 10:54

Ну вот ShockWave512 уже и ответил. Наследуйтесь от SkinnableContainer, в наследнике реализуйте логику взаимодействия своих дополнительных элементов, а отображение/позиционирование и т.д. будет реализовываться в скине.

elder_Nosferatu 23.06.2016 14:30

Огромное спасибо! То, что нужно. Как то сам даже не подумал бы смотреть в сторону SkinnableContainer. Мне казалось, что скины - чисто декоративный элемент. А может еще посоветуете что почитать кроме справочных материалов? Хотелось бы чего то в духе лекций или детального обзора на тему флексовых библиотек, после чего в доки будешь лезть с пониманием дела. Ну и обилие кириллицы приветствуется ;)

alatar 23.06.2016 16:13

На английском можно найти ссылки на статьи и видео в документации от Adobe (она все еще актуальна). Дополнительно есть ссылки видео-уроки на http://flex.apache.org/.
Насчет документации на русском, трудно сказать... Вы малость припозднились (лет на шесть/семь) и многие ссылки уже протухли.
Можете у меня в блоге поколупасть, я писал несколько статей по скинированию и компонентам, правда практического толка.


Часовой пояс GMT +4, время: 14:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.