Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MXML и AS3 (http://www.flasher.ru/forum/showthread.php?t=178673)

ikozlov 26.04.2012 19:35

MXML и AS3
 
Доброго времени суток.
Раньше писал на AS3, но никогда не затрагивал MXML т.к. UI делался всегда в Flash CS. А сейчас уперся в то, что надо поддерживать UI и код в одном месте. Выбрал Flash Builder.
И сходу уперся в 2е вещи
1. В MXML хотелось бы "нарисовать" только UI, а обработчики событий вынести в класс на AS3
2. Скомпилированная SWF несет с собой ряд других SWF библиотек, которые мне не нудны(и изрядно увеличивают вес приложения)

Заранее спасибо!

wvxvw 26.04.2012 19:52

MXML это шаблон, из него получается AS3 и он, в свою очередь основывается на AS3. Например, если у вас есть AS3 класс example/Foo.as и вы создали Bar.mxml такой, что:
Код:

<components:Foo xmlns:components="example.*" />
то в Bar.mxml вам будут доступны методы Foo, точно так же, как если бы вы просто унаследовались от этого класса (за очень небольшим исключением - сгенерированый код, например, увидев, что класс наследуется от UIComponent переопределит в нем moduleFactory свойство). Но это мелочи.
Другой вариант - можно в теге <Script/> указывать source="file.as" аттрибут, и это будет работать как include, но лучше так не делать изза того, что редакторы такой подход плохо понимают.
В принципе вы точно так же можете унаследовать класс от класса созданного в MXML файле, но лучше этого не делать, потому что MXML добавляет кучу сгенерированных методов и работать с ними в классе-наследнике очень проблематично.

Так же, компоненты по задумке авторов, задуманы так, чтобы им можно было делать скины не меняя их самих. Но нет хороших инструментов для того, чтобы это делать. Да и вообще очень муторно.

ikozlov 26.04.2012 20:01

А можно попросить простенький пример, как можно навесить обработчик на кнопку, которая создана в mxml, а обработчик находился в .as3
из вышеописанного общая теория понятна, но вот как обратиться к объекту?

Добавлено через 18 минут
И очень важен момент с доп либами т.к. вес очень велик

sstotenkopf 26.04.2012 20:40

установите айди для объекта, по нему и обращайтесь

Jewelz 26.04.2012 20:42

Код AS3:

<mx:Button click="doSearch(event)" label="Search" right="10" top="10"/>
<mx:Script>
        <![CDATA[                       
                private function doSearch(e:MouseEvent):void
                {
 
                }                       
        ]]>
</mx:Script>


ikozlov 26.04.2012 20:55

Цитата:

Сообщение от Jewelz (Сообщение 1077169)
Код AS3:

<mx:Button click="doSearch(event)" label="Search" right="10" top="10"/>
<mx:Script>
        <![CDATA[                       
                private function doSearch(e:MouseEvent):void
                {
 
                }                       
        ]]>
</mx:Script>


ну такой вариант мне не подходит так как есть необходимость в отдельном файле .as3 держать все обработчики

Добавлено через 1 минуту
Цитата:

Сообщение от sstotenkopf (Сообщение 1077168)
установите айди для объекта, по нему и обращайтесь

так в этом то и вопрос - как обратиться? Предположим у меня есть mxml где описан объект с id = newButton
Что нужно указать в mxml для того чтобы класс подгрузился и можно было бы навешивать обработчики и как должен выглядеть обработчик?

Inet_PC 26.04.2012 22:43

Вложений: 1
В прикрепленном примере (сори за то, что Flex 3.2, нет под рукой ничего более) три варианта реализации того, что Вы хотите. Третий вариант (inline) самый ужасный и использовать его не стоит, это однозначно. Вообще из-за того Flex/Flash builder не делает это за нас писать код становится довольно сложно и самое печальное кода становится в разы больше. Немного выручают скины во Flex 4.0 и выше. Которые своего рода тоже codeBehind. То есть если вы так сильно противитесь кода внутри mxml файлов, то скины это лучшее из возможных вариантов (примеров в интернете предостаточно). И хотелось бы услышать хотябы одну внятную причину не писать код в mxml - е? Если что не так, то прошу поправить.

Inet_PC 26.04.2012 22:47

На самом деле так легко только в простом приведенном примере. Беда в том, что не всегда можно точно сказать когда flex создаст компонент и мы получим ссылку на него. Flex не создает все сразу, например если кнопка объявлена в каком-то стейте, то ссылку мы не получим до тех пор, пока компонент не войдет в это состояние.

ikozlov 26.04.2012 23:01

Цитата:

И хотелось бы услышать хотябы одну внятную причину не писать код в mxml - е?
Да нету адекватной причины - просто хотелось разнести и небыло понимания что будут проблемы с биндингом такие серьезные.
На самом деле просто сделаю другой вид абстракции. спасибо, все стало более менее ясно.


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

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