Можно ли использовать Flex Framework / Компоненты без использования MXML?

StackOverflow https://stackoverflow.com/questions/141288

Вопрос

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

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

Это было полезно?

Решение

Я сделал простой bootstrap, похожий на 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!");
        }
    }
}

Другие советы

Это очень простое приложение, которое выполняет только базовую загрузку на 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);
}

ПРИМЕЧАНИЕ:Приведенный ниже ответ на самом деле не будет работать, если вы сначала не инициализируете библиотеку 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 framework при использовании mxmlc или указывать на папку, содержащую исходный код, при использовании любого из них).Если только класс document не наследует от mx.core.Application однако у вас могут возникнуть некоторые проблемы, поскольку некоторые вещи в фреймворке предполагают, что это так.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top