2008-09-26 1 views
19

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

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

ответ

13

Я сделал простой бутстрап, похожий на 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:

основной.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!"); 
     } 
    } 
} 
0

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

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

+0

Это весьма не работает. Вы получаете различные ошибки, когда на самом деле пытаетесь использовать компоненты Flex, такие как Button или DataGrid и т. Д. – davr 2010-07-26 02:51:24

9

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

Это хорошо, но, к сожалению, в FlashDevelop отсутствует завершение кода. «Кнопка». Любой способ включить это? – 2008-10-23 09:06:45

7

Примечание: ниже ответ не будет реально работать, если вы не инициализировать библиотеку 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

Хм ... Я решил попробовать, и простой «Hello World» получает массу ошибок во время выполнения. Есть ли какая-то инициализация, которую мне нужно сделать, или другие конкретные классы, которые мне нужно включить? – davr 2008-09-29 14:38:27

+0

Это очень легко узнать, просто добавьте -keep-generated-actionscript в флагов компилятора и скомпилируйте класс MXML, который наследуется от приложения. Компилятор создает каталог с именем «сгенерированный», где вы можете найти сгенерированный код ActionScript. Это немного сложнее, чем выше, правда. – Theo 2008-09-29 17:19:52

Смежные вопросы