Просмотр полной версии : MXML и AS3
Доброго времени суток.
Раньше писал на AS3, но никогда не затрагивал MXML т.к. UI делался всегда в Flash CS. А сейчас уперся в то, что надо поддерживать UI и код в одном месте. Выбрал Flash Builder.
И сходу уперся в 2е вещи
1. В MXML хотелось бы "нарисовать" только UI, а обработчики событий вынести в класс на AS3
2. Скомпилированная SWF несет с собой ряд других SWF библиотек, которые мне не нудны(и изрядно увеличивают вес приложения)
Заранее спасибо!
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 добавляет кучу сгенерированных методов и работать с ними в классе-наследнике очень проблематично.
Так же, компоненты по задумке авторов, задуманы так, чтобы им можно было делать скины не меняя их самих. Но нет хороших инструментов для того, чтобы это делать. Да и вообще очень муторно.
А можно попросить простенький пример, как можно навесить обработчик на кнопку, которая создана в mxml, а обработчик находился в .as3
из вышеописанного общая теория понятна, но вот как обратиться к объекту?
Добавлено через 18 минут
И очень важен момент с доп либами т.к. вес очень велик
sstotenkopf
26.04.2012, 20:40
установите айди для объекта, по нему и обращайтесь
<mx:Button click="doSearch(event)" label="Search" right="10" top="10"/>
<mx:Script>
<![CDATA[
private function doSearch(e:MouseEvent):void
{
}
]]>
</mx:Script>
<mx:Button click="doSearch(event)" label="Search" right="10" top="10"/>
<mx:Script>
<![CDATA[
private function doSearch(e:MouseEvent):void
{
}
]]>
</mx:Script>
ну такой вариант мне не подходит так как есть необходимость в отдельном файле .as3 держать все обработчики
Добавлено через 1 минуту
установите айди для объекта, по нему и обращайтесь
так в этом то и вопрос - как обратиться? Предположим у меня есть mxml где описан объект с id = newButton
Что нужно указать в mxml для того чтобы класс подгрузился и можно было бы навешивать обработчики и как должен выглядеть обработчик?
В прикрепленном примере (сори за то, что Flex 3.2, нет под рукой ничего более) три варианта реализации того, что Вы хотите. Третий вариант (inline) самый ужасный и использовать его не стоит, это однозначно. Вообще из-за того Flex/Flash builder не делает это за нас писать код становится довольно сложно и самое печальное кода становится в разы больше. Немного выручают скины во Flex 4.0 и выше. Которые своего рода тоже codeBehind. То есть если вы так сильно противитесь кода внутри mxml файлов, то скины это лучшее из возможных вариантов (примеров в интернете предостаточно). И хотелось бы услышать хотябы одну внятную причину не писать код в mxml - е? Если что не так, то прошу поправить.
На самом деле так легко только в простом приведенном примере. Беда в том, что не всегда можно точно сказать когда flex создаст компонент и мы получим ссылку на него. Flex не создает все сразу, например если кнопка объявлена в каком-то стейте, то ссылку мы не получим до тех пор, пока компонент не войдет в это состояние.
И хотелось бы услышать хотябы одну внятную причину не писать код в mxml - е?
Да нету адекватной причины - просто хотелось разнести и небыло понимания что будут проблемы с биндингом такие серьезные.
На самом деле просто сделаю другой вид абстракции. спасибо, все стало более менее ясно.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.