달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2010. 7. 9. 13:33

사용자 정의 컴포넌트 만들기 Enjoy/FLEX2010. 7. 9. 13:33

http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS2db454920e96a9e51e63e3d11c0bf68268-7ffb.html

MXML 또는 ActionScript 파일로 사용자 정의 컴포넌트를 만들 수 있습니다.

MXML component 만들기

플렉스는 고객이 주소 정보를 입력할때 사용할 수 있는 Spark ComboBox를 제공하고 있습니다. 폼에서 미국내 50개 주의 목록에서 선택할 수 있도록 ComboBox를 포함할 수 있습니다. 사용자가 주소를 입력할 수 있는 여러개의 폼이 있는 어플리케이션에서 50개 주에 대한 동일한 정보로 여러 개의 ComboBox 컨트롤을 반복해서 생성하고 초기화 시키는 작업은 지루한 것입니다.

대신 50개 주가 사전에 세팅되어 있는 ComboBox 컨트롤을 포함하는 하나의 MXML 컴포넌트를 만들 수 있습니다. 그럼 어플리케이션 어디에서든지 이 MXML 컴포넌트를 사용하여 주를 선택할 수 있는 기능을 추가할 수 있습니다. 다음은 사용자 정의 ComboBox 컨트롤에 대한 예시를 보여줍니다.

<?xml version="1.0"?>
<!-- createcomps_intro\StateComboBox.mxml -->
<!-- Specify the root tag and namespace. -->
<s:ComboBox xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:dataProvider>
<s:ArrayList>
<fx:String>AK</fx:String>
<fx:String>AL</fx:String>
<!-- Add all other states. -->
</s:ArrayList>
</s:dataProvider>
</s:ComboBox>

이 예제는 다음과 같은 내용을 보여줍니다.

  1. 사용자 정의 MXML 컴포넌트 정의의 첫 번째 라인은 XML 버전을 선언합니다.

  2. root  태그라고 불리는 컴포넌트의 첫 번째 MXML 태그는 플렉스 컴포넌트 또는 사용자 정의 컴포넌트을 명시합니다. 따라서 MXML 컴포넌트는 ActionScript 클래스에서와 비슷하게 MXML 컴포넌트의 슈퍼클래스를 루트 태그에서 지정합니다. 이 예제에서 MXML 컴포넌트의 슈퍼 클래스로 플렉스 ComboBox 컨트롤을 지정합니다.

  3. 루트 태그에 xmlns 속성은 플렉스의 XML 네임 스페이스를 지정합니다. 이 예제에서는 xmlns 속성은 접두사 mx:를 사용하는 MX 네임 스페이스에 해당하는 태그를 나타냅니다.

  4. 컴포넌트의 나머지 라인은 컴포넌트에 대한 정의입니다.

다음 예제에서는 메인 어플리케이션이나 다른 MXML 컴포넌트 파일에서  StateComboBox 컴포넌트를 참조하는 것을 보여줍니다.

<?xml version="1.0"?>
<!-- createcomps_intro/IntroMyApplication.mxml -->
<!-- Include the namespace definition for your custom components. -->
<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"
xmlns:MyComp="*">

<!-- Use the filename as the MXML tag name. -->
<MyComp:StateComboBox/>
</s:Application>


이 예제에 대한 실행 swf파일은 아래에 있습니다.

SWF파일 링크
 

사용자 지정 컴포넌트에 대한 MXML 태그 이름은 두 부분으로 구성되어 있습니다. 네임 스페이스 접두사(이 경우에는 MyComp) 와 태그 이름입니다. 네임 스페이스 접두사는 사용자 지정 컴포넌트를 구현하는 파일을 어디에서 찾아야 하는지 플랙스에게 알려줍니다. 태그 이름은 (이 경우에는 StateComboBox.mxml에 해당) 컴포넌트의 파일이름에 기초합니다. 따라서 StateComboBox.mxml 파일이 <namespace:StateComboBox>의 태그 이름을 가진 컴포넌트를 정의합니다.
 
<s:Application> 태그에서 메인 어플리케이션 파일은 다음 네임 스페이스 정의 xmlns:MyComp ="*"를 포함합니다. 이 정의는 그 컴포넌트가 기본 어플리케이션 파일이 있는 디렉토리 또는 ActionScript 소스 경로에 포함된 디렉토리에 있다는 것을 명시합니다. MXML 컴포넌트 배포에 대한 자세한 내용은 Simple MXML components를 참조하십시오.

어플리케이션의 하위 디렉터리에 사용자 정의 컴포넌트를 넣는 것이 가장 좋은 방법입니다. 그것들은 각자 다른 네임 스페이스를 가지고 있기 때문에 컴포넌트 이름이 중복되지 않도록 하는데 많은 도움이 될것입니다. 어플리케이션의 myComponents라는 하위 디렉터리에 컴포넌트를 저장하면 네임 스페이스는 xmlns:MyComp="myComponents.*"가 될 것입니다.

StateComboBox.mxml 파일의 루트 태그로 ComboBox 컨트롤을 지정했으므로, 사용자 정의 컴포넌트의 MXML 태그에서 또는 ActionScript <fx:Script> 태그에서 ComboBox 컨트롤의 모든 속성을 참조할 수 있습니다. 예를 들어 다음 예제는 ComboBox.maxChars 속성과 ComboBox.close 이벤트 리스너를 지정하는 것을 보여줍니다.
<?xml version="1.0"?>
<!-- createcomps_intro/MyApplicationProperties.mxml -->
<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"
xmlns:MyComp="myComponents.*">

<fx:Script>
<![CDATA[
import flash.events.Event;

private function handleCloseEvent(eventObj:Event):void {
// ...
}
]]>
</fx:Script>

<MyComp:StateComboBox maxChars="25"
close="handleCloseEvent(event);"/>
</s:Application>

 

이 예제에 대한 실행 swf파일은 아래에 있습니다.

SWF파일 링크

MXML componrnt에 대한 자세한 내용은 Simple MXML components 참조하십시오.

ActionScript 컴포넌트 만들기

ActionScript 클래스를 정의하여 ActionScript 컴포넌트를 만들 수 있습니다. ActionScript에서 다음과 같은 유형의 componrnt를 만들 수 있습니다.
User-interface, visual, components
사용자 인터페이스 컴포넌트는 처리 논리와 시각적인 요소 모두를 포함하고 있습니다. 기존의 동작을 수정하거나 컴포넌트에 새로운 기능을 추가하는 사용자 지정 사용자 인터페이스 컴포넌트를 만듭니다. 이러한 컴포넌트는 일반적으로 플렉스 컴포넌트 계층 구조를 확장합니다. UIComponent 클래스 또는 Button, ComboBox, DataGrid와 같은 플렉스 컴포넌트를 확장할 수 있습니다. 사용자 정의 ActionScript 컴포넌트의 모든 메서드와 속성, 이벤트, 스타일, 효과는 super클래스로부터 상속 받습니다.
 
Nonvisual components
Nonvisual 컴포넌트는 비시각적 요소를 정의합니다. 플렉스는 formatters, validators, effects를 포함한 nonvisual 컴포넌트의 몇 가지 유형이 있습니다. 플렉스 컴포넌트 구조로부터 하위 클래스를 만들어 nonvisual 컴포넌트를 만들 수 있습니다. validator의 경우 Validator 클래스의 하위 클래스를 만들고 formatter의 경우 Formatter클래스의 하위클래스를 만들고 effect의 경우Effect클래스의 하위 클래스를 만들어 컴포넌트를 만듭니다.

예를 들어 사용자 정의 버튼 컴포넌트를  Spark Button 클래스를 기반으로 정의할 수 있다는 것을 다음 예제로 보여줍니다 :

package myComponents
{
// createcomps_intro/myComponents/MyButton.as
import spark.components.Button;

public class MyButton extends
Button {

// Define the constructor.
public function MyButton() {
// Call the constructor in the superclass.
super();
// Set the label property to "Submit".
label="Submit";
}
}
}

예제에서는 MyButton.as 파일에 MyButton 클래스를 작성합니다.

ActionScript 패키지 내에서 사용자 지정 컴포넌트를 정의해야합니다. 패키지는 어플리케이션의 디렉터리 구조에 컴포넌트의 디렉토리 위치를 반영합니다. 일반적으로 ActionScript 소스 경로에있는 어플리케이션의 하위 디렉토리나 또는 Adobe® LiveCycle™ Data Services ES를 위한 WEB-INF/flex/user_classes 디렉터리에 사용자 정의 ActionScript의 컴포넌트를 넣어둡니다. 이 예제에서는 패키지는 MyButton.as 파일이 플렉스 어플리케이션의 하위 디렉터리인 myComponents에 있다는 것을 나타냅니다.
 
다음 예제는 사용자 정의 컴포넌트를 참조하는 MXML 파일에서 네임 스페이스를 정의하고 MXML 파일에서 그것을 참조하는 방법을 보여줍니다. 
 
<?xml version="1.0"?>
<!-- createcomps_intro/MyApplicationASComponent.mxml -->
<!-- Include the namespace definition for your custom components. -->
<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" 
    xmlns:MyComp="myComponents.*">

    <!-- Use the filename as the MXML tag name. -->
    <MyComp:MyButton/>

</s:Application>
 
이 예제에 대한 실행 swf 파일은 아래에 있습니다.
SWF파일 링크
 
이 예제에서는 먼저 어플리케이션의 디렉토리 구조에서 사용자 정의 컴포넌트의 위치를 명시하는 MyComp 네임 스페이스를 정의합니다. 그런 다음 네임스페이스 접두사를 사용하는 MXML의 태그로 컴포넌트를 참조합니다.
 
자세한 내용은 Create simple visual components in ActionScript를 참조하십시오.

컴포넌트 배포

MXML이나 ActionScript 파일로 사용자 정의 컴포넌트를 배포할 때 일반적으로 지정된 어플리케이션 파일과 같은 디렉토리나 ActionScript 소스 경로로 설정된 디렉토리, LiveCycle Data Services ES를 위한 WEB-INF/flex/user_classes 디렉토리 구조로 사용자 정의 컴포넌트를 배포합니다

보안상의 이유로 소스 코드 파일로 사용자 지정 컴포넌트를 배포하지 않기로 결정할 수도 있습니다. 이런 경우 SWC 파일이나  Runtime Shared Library (RSL)의 일부로 컴포넌트를 배포할 수있습니다.

SWC 파일은 플렉스 컴포넌트에 대한 아카이브 파일입니다. SWC 파일은 플렉스 개발자들 사이에 컴포넌트를 쉽게 주고 받을 수 있도록 합니다. MXML 이나 ActionScript 파일, 이미지 및 기타 리소스 파일 대신 swc파일 하나만 전달하면 됩니다. 또한 컴파일된 SWF 파일을 SWC 파일 내부에 담고 있어서 그 코드가 외부로 노출되지 않습니다.

SWC 파일은 하나 이상의 컴포넌트를 포함하는 PKZIP 압축 형식으로 압축하거나 풀수 있는 파일입니다. SWC은 WinZip, JAR 또는 다른 압축 도구를 사용하여 파일을 확인해 볼 수 있습니다. 그러나 수동으로 SWC 파일의 내용을 변경해서는 안됩니다. SWC 파일 내부의 SWF 파일을 SWC외부에서 실행하려고 해서도 안됩니다.

SWC 파일을 만들기 위해서는 flex_install_dir/bin 디렉토리에 있는 compc 유틸리티를 사용합니다. compc 유틸리티는 MXML/ActionScript  componrnt 소스 파일에서 SWC 파일을 생성 합니다. compc에 대한 자세한 내용은 Flex compilers를 참조하십시오.

application의 SWF 파일 크기를 줄이는 한 가지 방법은 별도로 다운로드되어 클라이언트 캐시에 남아있게 되는 stand-alone file에 공통으로 사용되는 자원을 객관화(externalizing)하는 것입니다. 이러한 공유 자원은 런타임에 여러 어플리케이션에서 수차례 로드가 시도되어도 클라이언트측에는 단 한번만 전송됩니다. 이 공유 파일은 Runtime Shared Libraries 또는 RSLs로 알려져 있습니다.

RSL 파일을 만드는 방법을 포함한 자세한 내용은 Runtime Shared Libraries를 참조하십시오.
:
Posted by 라면스프