2008-09-26 3 views
19

MXML을 사용하지 않고도 Flex 프레임 워크 및 구성 요소를 사용할 수 있습니까? 나는 ActionScript를 꽤 알기 쉽다. 거기에 간단한 UI를 얻기 위해 새로운 XML 언어로 어지러운 것처럼 느껴지지 않는다. 누구나 컴파일 할 수있는 .as 파일 (예 : FlashDevelop를 통해 이상적으로 Flex SDK로 작업하는 방법을 말하는 것만으로도)을 구성하고 Flex Framework를 사용하는 예제를 제공 할 수 있습니까? 예를 들어, Alert를 열 때 나타나는 Flex 버튼을 보여주는 것이 완벽 할 것입니다.MXML을 사용하지 않고 Flex Framework/Components를 사용할 수 있습니까?

가능하지 않은 경우 누군가 Flex SDK에 액세스 할 수있는 사용자 정의 AS 클래스를 부트 스트랩하는 최소 MXML 파일을 제공 할 수 있습니까?

답변

13

나는 Borek (아래 참조)와 비슷한 간단한 부트 스트랩을 만들었습니다. 나는 mxml 파일을 없애고 싶지만, 없으면 Flex (haloclassic.swc 등)와 함께 제공되는 표준 테마를 얻지 못합니다. 테오가 제안하는 것을 수행하는 방법을 아는 사람이 있습니까? 그리고 여전히 표준 테마가 적용되어 있습니까? 여기


플렉스 4를 사용하는 데 필요한 업데이트입니다

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"); 
     } 
    } 
} 
:

은 여기 내 간단한 부트 스트랩 방법의

메인.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

멋지다. mxml-wise와 같이 최소한으로 생각할 수있다. 거의 순수한 AS 코드이므로 답변을 수락하십시오. – davr

+0

아름다운, 고마워. FlashDevelop를 사용하면 "버튼"과 같은 객체에 대해 풍부한 코드 완성 기능을 사용할 수도 있습니다. 좋은. 이것은 Borek의 예에서 효과가 없었습니다. –

+1

Flex 4에 필요한 코드 예를 포함하도록 업데이트되었습니다. – davr

0

예, 클래스 경로에 flex swc를 포함하면됩니다. 프레임 워크/lib/flex.swc의 flex sdk에서 flex.swc를 찾을 수 있습니다

편집 : 한 가지 더 : Flex Builder를 사용하는 경우 새 ActionScript 프로젝트를 만들면 간단하게 만들 수 있습니다 위와 같이.

+0

그것은 꽤 작업을 수행합니다. Button이나 DataGrid 등의 Flex 구성 요소를 실제로 사용하려고하면 다양한 오류가 발생합니다. – davr

9

이것은 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에서는 예를 들어 코드 완성이 없습니다. "단추". 그걸 가능하게하는 어떤 방법? –

7

참고 :이 MXML 당신이 먼저 플렉스 라이브러리를 초기화하지 않는 한 아래의 대답은 실제로 작동하지 않습니다. 이를 수행하는 데 관련된 많은 코드가 있습니다. 자세한 내용은 아래 주석 또는 다른 답변을 참조하십시오.


메인 클래스도 단지 (A <mx:Application> 루트 노드와의 MXML 클래스 어쨌든 컴파일 무엇 인) mx.core.Application에서 상속하는 클래스를 만들고, MXML에있을 필요하지 않습니다

package { 

    import mx.core.Application; 


    public class MyFancyApplication extends Application { 

    // do whatever you want here 

    } 

} 

mxmlc 컴파일러 또는 심지어 Flash CS3 작성 도구로 컴파일 된 ActionScript 코드는 모두 Flex 클래스를 사용할 수 있습니다. 클래스 패스에서 사용할 수 있도록하는 것입니다 (mxmlc을 사용할 때 SWC 프레임 워크 참조). 또는 둘 중 하나를 사용할 때 소스가 포함 된 폴더를 가리킴). 문서 클래스가 mx.core.Application에서 상속되지 않는 한 프레임 워크의 일부 내용은이 경우를 전제로하므로 약간의 문제가 발생할 수 있습니다.

+0

흠 ... 실제로 이것을 시도해 보았습니다. 간단한 "Hello World"는 수 많은 런타임 오류를 가져옵니다. 어떤 종류의 초기화가 필요합니까? 아니면 내가 포함시켜야 할 다른 특정 클래스가 있습니까? – davr

+0

컴파일러 플래그에 -keep-generated-actionscript를 추가하고 Application에서 상속 한 MXML 클래스를 컴파일하는 것이 매우 쉽습니다. 컴파일러는 생성 된 ActionScript 코드를 찾을 수있는 "generated"라는 디렉토리를 만듭니다. 위보다 조금 더 복잡합니다. – Theo