Flex로 커스텀 컴포넌트를 만들 때 필수적으로 알아야할 라이프 사이클을 쉽게 이미지로 표현

 

 

Posted by 미랭군

엄진영의 Flex 동영상 강좌 (아래 링크 따라가세요.)

http://brand.pandora.tv/224336119

Posted by 미랭군
btn.addEventListener(MouseEvent.CLICK, onClick);

function onClick(event:MouseEvent):void
{
    navigateToURL(new URLRequest(http://www.naver.com));
}

Posted by 미랭군
Posted by 미랭군

보내는 스트링은 앞뒤를 식별가능한 고유 스트링으로 감싸야합니다.

예를 들어 쏘는 데이터를

var sendData:String = "<xxx>~~~~</xxx>"

라고 하면,  (* <xxx>와 </xxx>는 데이터 앞뒤를 구분하기 위해 임의로 붙임)

function onReceiveData(e:ProgressEvent):void
{
    var str:String = Socket(e.target).readMultiByte(Socket(e.target).bytesAvailable, "utf-8");
    parsingSocketData(str);
}

var socketStr:String; //조각난 데이터 저장 스트링
function parsingSocketData(str:String):void
{
    if (str.substr(0, 5) == "<xxx>")
    {
         socketStr = str;
    }
    else
    {
         socketStr += str;
    }

    if (socketStr.substr(-6, 6) == "</xxx>")
    {
         //socketStr :: 최종 데이터 완성
        //이후 데이터 처리
    }
}

와 같이 처리하면 아무리 큰 스트링이라도 처리 가능합니다.

그리고, 한가지 더.

오브젝트를 쏠 때도 마찬가지로 1600바이트 근처가면 데이터가 나눠져서 넘어가게 되는데..
오브젝트는 이 방식으로 체크하기가 편치가 않죠.
그럴때는 ObjectSerialization 같은 패키지를 구하셔서 object -> string으로 변환한뒤
위의 방식으로 쏘시고, 받고, 다시 object로 변환하시면 됩니다.

byteArray 같은 경우도 일단 compress해서 무리없이 넘어간다면 괜찮지만(byteArray는 무조건 compress하세요. byteArray만의 큰 매리트입니다), 에러가 발생한다면
readMultiByte 로 스트링으로 변환, 앞뒤 식별스트링 붙인 후 처리하시면 됩니다.

아 그리고 이 방식은 스트링이 처리하기가 가장 편하여 사용한 방식입니다. 기타 데이터포맷도 잘 다루시는 분이면 다른 테이터포맷으로 하셔도 무방합니다. ^^
Posted by 미랭군
http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions

위 링크에 있는 코딩 컨벤션에서도 보시면 알 수 있듯이..

flex에서는 if구문 안에서 Object를 상속 받은 모든 객체는 값의 유무에 따라서

true, false와 같이 Boolean타입의 데이터를 리턴해줍니다.

var data = []; //new Obejct();

허나 문제는

public set data(value:Object):void

{

this.data = value;

}

이렇게 data의 값을 지정하고

이것을 다시 어떤 메소드에서 null체크할 때 발생합니다.

if(data)

{

//실행

}

else

{

//실행2

}

이때 만약 0이라는 값을 이 컴포넌트에 mxml로 <comp:MyComp data="0" width="100%" height="100%"/>

하려고 할 때 약간의 문제가 발생합니다. 사실 대부분의 사람들은 null이 아닌 경우를 체크하기 위해서

if(data)라는 구문을 쓰게 되는데 "0"이라는 값을 Object타입으로 넣으면 false를 리턴하게 됩니다.

즉 null이 아닌데도 불구하고 실행2가 실행되는거죠.

Object타입일 경우엔 null체크를 if(data != null)로 정확히 명시해주셔야합니다.

Type Can you remember which of these values coerce to false?
Number 0, NaN
String null, ""
XML / XMLList null, </>
Array null, []
Object null, {}, 0, NaN, false, </>
* undefined, null, {}, 0, NaN, false, </>
Posted by 미랭군

컴포넌트를 개발하면서 쓰기 편하게 만드려면 메타 태그를 잘 활용해야 한다.
가령 어떤 컴포넌트를 만들었고 그안에 public flag 하나를 만들어서 외부에서 조정한다고 해보자

var mc:MyComponent = new MyComponent();
mc.flag = true;

액션스크립트를 쓰면 이렇게만 쓰면 되기 때문에 public 이면 충분하다. 개발 시간은 항상 빡빡하니까 ㅠㅠ

그런데 플렉스 개발을 계속 하다보니 정적인 컴포넌트는 mxml로 짜는 것이 500% 쯤 낫다는 거다.
여기서 정적이다라는 말은 개당 컴포넌트가 화면에 많지 않고 개체수가 고정되있다는 말이다.
움직이고 사라지고와는 관계가 없다.

그래서 컴포넌트를 mxml로 짜면

<comp:MyComponent flag="true"/>

이런 형태가 되는데 flag를 읽어오긴 하지만 기본값이 없다. 기본 컴포넌트의 enabled 같은 속성을 써보면
enabled 치면 코드힌트로 선택할 수 있는 값들이 나오는 것을 알 수 있다.

그래서 찾아본 결과 Inspectable 메타 태그를 쓰면 된다는 사실을 알게 되었다.
아래 코드처럼 MyComponent 안에 작성하게 되면 이제 코드힌트도 팍팍 주는 떳떳한 mxml 컴포넌트라 할 수 있겠다.

private var _flag:Boolean = true;

public function get flag():Boolean {
return _flag;
}

[Inspectable( category="General", enumeration="true,false", defaultValue="true" )]
public function set flag( value:Boolean ):void {
_flag = value;
}


메타데이터 태그 공식 레퍼런스 페이지
http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html
Posted by 미랭군

flex4에선 swf를 감싸는 html 템플릿 형식이 약간 변경되었다.

아래와 붉은 색과 같이 사용하면 된다.

  <script type="text/javascript">
          
            var swfVersionStr = "10.0.1";
            var xiSwfUrlStr = "playerProductInstall.swf";
            var flashvars = {};

            flashvars.type = "타입명";
            flashvars.name = "이름";

            var params = {};
            params.quality = "high";
            params.bgcolor = "#ffffff";
            params.allowscriptaccess = "sameDomain";
            params.allowfullscreen = "true";
            var attributes = {};
            attributes.id = "MKBSDashboard";
            attributes.name = "MKBSDashboard";
            attributes.align = "middle";
            swfobject.embedSWF(
                "MKBSDashboard.swf", "flashContent",
                "100%", "100%",
                swfVersionStr, xiSwfUrlStr,
                flashvars, params, attributes);
   <!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
   swfobject.createCSS("#flashContent", "display:block;text-align:left;");
  </script>


Flex Application에선 필시 붉은 색 표시와 같이 creationComplete 이벤트 발생 후에 사용해야 한다.

<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"
      minWidth="955" minHeight="600"
      preinitialize="onPreinitialize()"
      creationComplete="onCreationComplete()"

   private function onCreationComplete():void
   {
    trace("파라미터", parameters.type as String);
   }

  ]]>
 </fx:Script> 
</s:Application>

'플렉스·플래시·액션스크립트3' 카테고리의 다른 글

null check에 대한 고찰..  (0) 2012.01.04
[Inspectable] 메타 태그 사용하기  (0) 2011.11.11
addEventListener 사용시 주의점  (0) 2011.05.04
AS3 KeyCode Table  (0) 2011.04.30
[FLEX] 드래그 기초  (0) 2010.11.29
Posted by 미랭군

public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

 

마지막의 weakRefence가 true이면 레퍼런스 오브젝트가 없어지면 자동으로 이벤트 리스너가 메모리에서 해제된다. 하지만 strong즉 false(default)일 경우 강제로 remove해주지 않으면 메모리를 차지 하고 있는다.


Posted by 미랭군

기능키 1 (상단)

숫자, 기호

알파벳

 기능키 2

우측 숫자판


ESC=27

F1=112
F2=113
F3=114
F4=115
F5=116
F6=117
F7=118
F8=119
F9=120
F10=121
F11=122
F12=123

CAPSLOOK=20
SCROLLLOCK=145
PAUSEBREAK=19

0=48
1=49
2=50
3=51
4=52
5=53
6=54
7=55
8=56
9=57
= =187
- =189
` =192
\ =220

백 스패이스=8

대소문자는 구별되지
않으나,
[한/영] 전환에서
한글로 되어 있으면
229로만 입력됩니다.

A=65
B=66
C=67
D=68
E=69
F=70
G=71
H=72
I=73
J=74
K=75
L=76
M=77
N=78
O=79
P=80
Q=81
R=82
S=83
T=84
U=85
V=86
W=87
X=88
Y=89
Z=90

PAGEUP=33
PAGEDN=34
END=35
HOME=36
INSERT=45
DELETE=46

TAB=9
ENTER=13
SHIFT=16
CTRL=17
ALT=18
SPACE=32

← =37
↑ =38
→ =39
↓ =40

한/영=21
한자=25
윈도우키(좌)=91
윈도우키(우)=92
기능키=93

NUMLOCK=144

0 = 96
1 = 97
2 = 98
3 = 99
4 = 100
5 = 101
6
= 102
7 = 103
8 = 104
9 = 105
. = 110
/ = 111
* = 106
+ = 107
- = 109

Posted by 미랭군