Возможно ли использовать Flex Framework / Components без использования MXML? - PullRequest
19 голосов
/ 26 сентября 2008

Можно ли использовать Flex Framework и Components без использования MXML? Я довольно хорошо знаю ActionScript, и мне не хочется возиться с каким-то новым языком XML, чтобы получить простой интерфейс. Может ли кто-нибудь предоставить пример, состоящий из файла .as, который можно скомпилировать (в идеале через FlashDevelop, хотя достаточно просто рассказать, как это сделать с помощью Flex SDK) и использовать Flex Framework? Например, просто показывать кнопку Flex, которая открывает Alert, было бы идеально.

Если это невозможно, может кто-нибудь предоставить минимальный файл MXML, который загрузит пользовательский класс AS, который затем получит доступ к Flex SDK?

Ответы [ 4 ]

13 голосов
/ 20 октября 2008

Я сделал простой бутстрап, похожий на Borek (см. Ниже). Я хотел бы избавиться от файла mxml, но если у меня его нет, я не получу ни одной из стандартных тем, которые поставляются с Flex (haloclassic.swc и т. Д.). Кто-нибудь знает, как сделать то, что предлагает Тео, и при этом применяются стандартные темы?

Вот мой упрощенный метод начальной загрузки:

main.mxml

<?xml version="1.0" encoding="utf-8"?>
<custom:ApplicationClass xmlns:custom="components.*"/>

ApplicationClass.as

package components {
    import mx.core.Application;
    import mx.events.FlexEvent;
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.controls.Button;

    public class ApplicationClass extends Application {
        public function ApplicationClass () {
            addEventListener (FlexEvent.CREATION_COMPLETE, handleComplete);
        }
        private function handleComplete( event : FlexEvent ) : void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName="halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addChild( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked on the button!", "Clickity");
        }
    }
}

Вот необходимые обновления для использования с Flex 4:

main.mxml

<?xml version="1.0" encoding="utf-8"?>
<local:MyApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="components.*" />

MyApplication.as

package components {
    import flash.events.MouseEvent;
    import mx.controls.Alert;
    import mx.events.FlexEvent;
    import spark.components.Application;
    import spark.components.Button;

    public class MyApplication extends Application {
        public function MyApplication() {
              addEventListener(FlexEvent.CREATION_COMPLETE, creationHandler);
        }
        private function creationHandler(e:FlexEvent):void {
            var button : Button = new Button();
            button.label = "My favorite button";
            button.styleName="halo"
            button.addEventListener(MouseEvent.CLICK, handleClick);
            addElement( button );
        }
        private function handleClick(e:MouseEvent):void {
            Alert.show("You clicked it!", "Clickity!");
        }
    }
}
9 голосов
/ 26 сентября 2008

Это очень простое приложение, которое выполняет только базовую загрузку в MXML. Это MXML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
  <mx:Script source="Script.as" />
</mx:Application>

Это Script.as:

import mx.controls.Button;
import flash.events.MouseEvent;
import mx.controls.Alert;
import mx.core.Application;

private function onCreationComplete() : void {
  var button : Button = new Button();
  button.label = "Click me";
  button.addEventListener(MouseEvent.CLICK, function(e : MouseEvent) : void {
    Alert.show("Clicked");
  });

  Application.application.addChild(button);
}
7 голосов
/ 27 сентября 2008

ПРИМЕЧАНИЕ. Приведенный ниже ответ не будет работать, если вы сначала не инициализируете библиотеку Flex. Для этого требуется много кода. См. Комментарии ниже или другие ответы для более подробной информации.


Основной класс даже не должен быть в MXML, просто создайте класс, который наследуется от mx.core.Application (это то, что класс MXML с корневым узлом <mx:Application> компилируется как и прежде):

package {

  import mx.core.Application;


  public class MyFancyApplication extends Application {

    // do whatever you want here

  }

}

Кроме того, любой код ActionScript, скомпилированный с помощью компилятора mxmlc - или даже инструмента разработки Flash CS3 - может использовать классы Flex, это просто вопрос их доступности в пути к классам (ссылка на SWC-инфраструктуру, когда используя mxmlc или указывая на папку, содержащую источник, при использовании любого из них). Если класс документа не наследуется от mx.core.Application, вы можете столкнуться с некоторыми проблемами, поскольку некоторые вещи в структуре предполагают, что это так.

0 голосов
/ 26 сентября 2008

Да, вам просто нужно включить flex swc в ваш classpath. Вы можете найти flex.swc в flex sdk в frameoworks / lib / flex.swc

edit: Еще одна вещь: если вы используете Flex Builder, вы можете просто создать новый проект ActionScript, который по сути будет делать то же, что и выше.

...