Я думаю, что вы спрашиваете, как сохранить ваши файлы ActionScript отдельно от файлов MXML, которые содержат ваши проекты. Ответ прост:
Создайте файл Actionscript. Включите в этот файл только методы и не переносите код в определение package
или class
. Файл должен выглядеть следующим образом:
import mx.controls.Alert;
// ActionScript file
/**
*
* Created By jviers
* Created on Apr 14, 2011
*
*
*/
public function hello():Alert{
Alert.show("Hello World!");
}
Создайте свой MXML-файл, содержащий ваши компоненты «Design». Создайте элемент Script
в этом mxml-файле и установите в качестве источника относительный путь к вашему файлу ActionScript. MXML должен выглядеть следующим образом:
<?xml version = "1.0" encoding = "utf-8"?>
<s:Application xmlns:fx = "http://ns.adobe.com/mxml/2009"
xmlns:s = "library://ns.adobe.com/flex/spark"
xmlns:mx = "library://ns.adobe.com/flex/mx"
minWidth = "955"
minHeight = "600">
<fx:Script>
<![CDATA[
protected function button1_clickHandler ( event : MouseEvent ) : void {
// TODO Auto-generated method stub
hello ();
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script source = "./scratch/MyFile.as" />
<s:Button label = "Show Alert" click = "button1_clickHandler(event)" />
</s:Application>
Вы заметите, что ActionScript в scratch.MyFile.as
выполняется при запуске приложения.
Вы можете использовать этот метод для включения вашей логики рисования в ваше приложение. Внешний ActionScript обрабатывается так, как если бы это были определения методов для класса, сгенерированного MXML.
Позвольте мне предупредить вас, прежде чем все перепрыгнут через меня. Это НЕ лучшая практика. Существуют конкретные варианты использования этой функции Flex. Прежде чем я подойду к ним, позвольте мне объяснить, почему ваше представление об отделении «логики» от вашего «взгляда» неверно.
Файлы Flex MXML не являются кодом только для просмотра. Это декларативный диалект, который упрощает определения классов ActionScript. Когда проект Flex компилируется с использованием mxmlc или compc (это программы компиляции для приложений flex и библиотек компонентов соответственно), файлы MXML предварительно компилируются в определения классов ActionScript. Если вы добавите директиву -keep-generated-actionscript
в параметры компилятора в команде компиляции Flash / Flex Builder / Ant / из командной строки, компилятор оставит сгенерированные классы, составляющие класс ActionScript, полученные из деклассивных файлов MXML в вашем проекте. Таким образом, файл MXML становится классом.
Определение ActionScript в блоке Script в вашем MXML равно НЕ , смешивающему «логику» с «представлением». Аналогично, MXML NOT определяет презентацию вашего проекта. Это просто декларативное подмножество языка ActionScript, упрощающее определение классов представления. В качестве доказательства вы можете определить ArrayCollections , Strings и Vectors в MXML. Эти классы являются контейнерами данных и не имеют абсолютно никакого отношения к представлению.
Итак, причина, по которой все ваши ActionScript помещаются во внешние файлы, заключается в том, что не очень хорошая вещь в том, что это делает поддержку вашего проекта головной болью. Мало того, что кто-то должен искать ваш компонент, определенный в MXML, теперь он должен искать кодовую базу, чтобы найти скрипт с именем Logic.as, относительно определенный для вашего компонента.
Варианты использования, в которых используется внешний ActionScript через Script.source, следующие:
- Группа предопределенных методов / свойств используется во многих компонентах без изменений. Вместо того чтобы копировать и вставлять эти методы в каждый компонент, вы используете свойство Script.source, чтобы один раз определить методы и ссылаться на них во всем приложении.
- Аналогично, но отличается от варианта использования-1: Вам требуется дополнение.Как и интерфейс, смешивание представляет собой набор методов, которые должны быть определены для работы компонента, и эти методы должны быть многократно используемыми и определять явные входные параметры и выходные параметры.В отличие от интерфейса, эти методы могут иметь любой тип пространства имен: защищенное, окончательное, общедоступное, внутреннее, mx_internal и т. Д. И могут выполнять функции тел, то есть иметь код внутри функционального блока
{}
.Для примера «смешивания» представьте перечислимый объект, объект, который имеет методы next (), previous (), reset () и iterator ().Когда вы хотите выполнить итерацию по свойствам объекта, вы вызываете iterator (), который возвращает объект итератора, который вызывает next () и previous () для извлечения следующих и предыдущих значений свойств из объекта.Вы можете смешивать эту функциональность со всеми видами объектов и использовать их с пользой.Кроме того, ваша включенная функциональность заключена в классы, в которые она включена.Она работает как директива включения в AS3.
Надеюсь, это поможет вам как понять, что такое "логика" и "презентация" во Flex, так и решить вашу конкретную проблему.