일반적인 HTML 에서 form 값을 검증하여 글 입력시..
해당 엘리먼트를 JavaScript 로 검증후 alert() 창을 띄우고 focus 를 잡아주는게 일반적일 것이다.

이와 같은 방식을
FLEX 에서 구현하려고 하였으나 문제가 발생하였다.

Alert.show() 메서드 호출후 setFocus() 메서드를 호출하였으나..
JavaScript 의 메커니즘(?)처럼 alert가 뜰시에 다음 로직이 사용자 반응이 있기까지 대기를 하고 있는 상태라면..

이녀석은 그렇지 않다.
바로 하위로직 alert가 뜨던 말던 바로 하위 로직을 실행 시켜버린다.

즉,
Alert.show("제목 입력하세요");
Component.setFocus();

// Alert.show(alert 창 띄워짐) ->*.setFocus(); 적용 및 하위로직 수행 -> 사용자가 "확인" 버튼 클릭
// 사용자가 확인 버튼 누른 순간 focus 는 사용자가 클릭한 버튼으로 이동해버리게 됨

위와 같은 소스가 있다면,  Alert 창이 사용자 반응을 기다리는게 아니라 바로 하위 소스를 실행 시켜버리게 된다.
주석을 달아놓은것과 같은 흐름이 펼쳐지게 되므로 focus를 잃어버리게 된다.

어떻게 해결할까?

해결방법은 크게 두가지다.

첫째, callLater() 메서드를 이용하는 방법.
둘째, Alert.show() 메서드의 CloseEvent를 이용하는 방법.

개인적으로 여기서 한가지 말을 하자면..
나는 사실 아직 완벽하게 callLater 메서드를 이해한것은 아니다.

자세한걸 원한다면
이 링크를 참조하길 바란다.

대략적으로 설명을 하자면..
모든 로직이(라이프 싸이클이라고 하는거 같다) 끝난뒤에 callLater 에 등록된 메서드를 호출 시키는 것이다.
(라이프싸이클을 컨트롤 한다고 하는거 같은데..자세한건 검색)

이게 정확히 맞는 설명인지는 모르겠지만,
작동방식을 테스트해본 결과..
모든 로직이 끝나고 나면..callLater 메서드에 등록된 함수(메서드)를 호출한 후에 그 함수의 로직이 끝나면,
마지막 로직이 끝난 부분으로 되돌리는거 같다..(확실한게 아니니 신뢰하지 말 것)

여튼 callLater 메서드를 이용한 해결방법을 설명 하자면,
callLater(Alert.show, ["Alert Title"]);
//callLater(method:Function, args:Array):void
id.
setFocus();
이와 같은 코드로 해결 할 수 있다. (실제 내가 만든 게시판이 이런식으로 되어있다)

두번째 방법으로 Alert.show 메서드의 CloseEvent 방법을 이용하는 방법으로는,
Alert.show("message", null, 4, null, closeTest);
public function closeTest(event:CloseEvent):void{
id.setFocus();
}
이와 같은 코드로 해결 할 수 있다.

Alert.show 메서드의 파라미터에 대한 자세한 내용은 레퍼런스를 참고 하도록 하자.
mx.controls 패키지 밑에 Alert 클래스에 나와있다.
저작자 표시 비영리 변경 금지
Posted by 붉은고래
RichTextEditor 는 Panel 이다. 이 부분을 명심..
이것때문에 삽질좀 펐다.

setFocus() 메서드를 이용하여 focus 를 잡으려고 했으나 도무질 잡히지 않았다..(당연하다. Panel 이니깐)

RichTextEditor 안의 TextArea 에 setFocus 를 설정해주면 된다.
컴포넌트 id.testArea.setFocus();

마찬가지 RichTextEditor 의 text 값을 접근할때도 위 방법을 토대로 하면 된다.

삽질하지 말자..
저작자 표시 비영리 변경 금지
Posted by 붉은고래

mxml 액션스크립트에서 사용시
x = 전체 넓이 - 컴포넌트 넓이 / 2;
y = 전체 높이 - 컴포넌트 높이 / 2;

컴포넌트가 팝업으로 뜰 시
Popupmanager.centerPopup(컴포넌트);

mxml 태그 속성 이용시
<mx:컴포넌트 ~~ horizontalCenter="0" verticalCenter="0" />

mxml 태그에 Data Binding 을 이용한 실시간 사이즈 변경
<mx:Button labe="test" width="{int(btn_size.text)}" />
<mx:TextInput id="btn_size" />

저작자 표시 비영리 변경 금지
Posted by 붉은고래
ie6 에서 margin이 2배이상으로 값이 들어갈 경우가 있는데,
이럴 경우 display: inline; 해주면 해결이 된다.
저작자 표시 비영리 변경 금지
Posted by 붉은고래
http://testdev.nayana.com/FlexBoard/

아직 국내에 이렇다 할 FLEX 게시판도 없고 예제도 특별히 없고...문서도 없고...해서 만들어보았다.
(없는지 내가 못찾는건지..내가 못찾는걸게야)

아직 수정해야 할 것들이 좀 많음..

앞으로 수정해야 할 사항

1. 검색처리 (완료)
2. 한글입력 느림 현상 처리 (완료)
3. 댓글 기능 추가
4. 파일첨부 기능
5. 기타 자잘한 버그들

음..이번에 플렉스를 하게 되면서 느낀점이 몇가지가 있는데..가장 큰 두가지는

첫째, 언어가 체계적이지 못하다.
둘째, mxml 이 좀 많이 병신이다.

javascript 로 html DOM 컨트롤 하듯이 생각했다간 큰 오산이다.
완전 개같은 경우가 많다.

일례로,
AS로 mxml 을 컨트롤 하는데..
mxml 의 effect 속성을 쓰려고 했는데..아무리 눈을 씻고 찾아봐도 API에 나오지 않았다.
나중에 알게된 사실이지만..setStyle() 이라는 메서드로 컨트롤 하더라.
..CSS컨트롤(스타일정의)만 할 줄 알았던 메서드가 effect 까지 컨트롤 할 줄이야..상상이나 했을까..
(effect 는 setEffect 와 같은 메서드로 따로 빼야하지 않을까? effect 와 style은 엄연히 다르다고 보는데..)

또한 mxml 이 뭔가 좀 불안전하다..(분명히 오류가 없다가 갑자기 쌩뚱맞게 오류를 내뿜는 경우가 종종 있다. 하지만 다시 새로고침을 해보면 다시 또 온전하다..이 뭐병..)

그리고 가장 엿같은것중 하나가 한글 지원이 엿같다는 점...

아직 갈길이 멀어보인다. 플렉스.

원래 계획은..FLEX -> AIR 까지 해보려고 했으나..
FLEX 에서 너무 많은 실망을 해서 AIR는 접음.

또 하나 발견된 버그로..
우분투 환경에서 한글입력이 안된다.
완전 개 실망이다..

하지만..UI 관점으로 보자면 너무나도 뛰어난 플랫폼인건 확실하다.
이 UI 지원이 너무나도 강력해서..버릴수가 없는것도 사실이다.

여하튼..
삽질한 것들도 정리해서 올려야겠다..
저작자 표시 비영리 변경 금지
Posted by 붉은고래