플렉스에서 페이징을 구현하다가 로그에 저런 에러가 무수히 찍히는 걸 보고 기겁했다.

로그가 찍히다보니 웹에서 딜레이도 살짝 있기에 해결하고싶었고, 로그창이 더러워져서...-_-;;


var objPage:Object = new Object(); objPage.pageNo = 1;

위의 부분에서 문제가 있었으며,


warning: unable to bind to property 'pageNo' on class 'Object' (class is not an IEventDispatcher)


라는 로그가 계속 출력되는 상황. 구글링을 해보니, 

리스트 기반의 컨트롤러의 dataProvider로 Object/ArrayCollection을 지정하면 플래시 플레이어가 타입 형변환을 제대로 인지하지 못하고, 그래서 해당 로그가 출력되었다는 점.

이걸 해결하기 위한 방법은 다음과 같다.


var objPage:ObjectProxy = new ObjectProxy();
objPage.pageNo = 1;

라고, Object 타입을 ObjectProxy로 변경해주면 끝 -_-;;


ObjectProxy 클래스는 등록되어있는 데이터의 변경을 추적하는 용도로 사용한다고...

블로그 이미지

김생선

세상의 모든것을 어장관리

개발을 하다보면 현재날짜와 지정날짜간의 차이를 구해야 하는 경우가 있다.

가령, 회사 플젝의 경우 현재 날짜와 24시간 이내에만 작업을 등록해야 하는 경우와 같다.


잡설 빼고 간단히 하자면 Date 메서드의 parse를 이용하면 된다.

parse는 YYYY/MM/DD HH:MM:SS 를 밀리세컨 단위로 변환시켜주는 함수이다.


YYYYMMDDHHMMSS라거나 기타 여러 커스텀 적인 날짜를 위의 함수를 이용하여 변환시켜주면 밀리세컨 단위의 결과값이 나온다.


아래의 예제를 보자.


//날짜 차이 구하는 부분 * 작업시작일과 작업마감일은 24시간 이내를 기준으로 한다.

var checkFirstStTime:String = sttime.substr(0,2); var checkSecondStTime:String = sttime.substr(2,2); var startTimeDate:String = startDate.replace("-","/").replace("-","/") +" "+                          checkFirstStTime + ":" + checkSecondStTime + ":" + "00";


sttime은 HHMM으로 저장된 시간이고 따라서 HH와 MM으로 분리하여 checkFirstStTime 과 checkSecondStTime에 저장한다.

그리고 YYYY-MM-DD로 저장된 startDate의 -를 replace를 이용하여 /로 치환하고, parse 형식에 맞춰 공백 입력 후 저장된 값들을 주어진 형식에 맞춰 startTimeDate에 입력해준다.


그럼 기존의 YYYY-MM-DD와 HHMM으로 저장된 각각의 값들이 YYYY/MM/DD HH:MM:SS로 저장이 된다.


시작 날짜를 위와 같이 변환해주고, 마감 날짜또한 변환해준 다음에 체크를 이용해주면 날짜간 차이가 확실해진다.

주의할점은 밀리세컨이기 때문에 날짜를 초로 변환하고 1000을 곱해줘야 한다는 사실.



+++덧

내가 써놓고 뭔말인지 모르겠지만 개발자는 코드로 말한다고 한다. 코드만 보면 이해가 가실듯.

블로그 이미지

김생선

세상의 모든것을 어장관리

Flex의 Alert창 내 text의 줄바꿈을 하기 위해서는 아래와 같이 해주면 된다.


Alert.show("작업 기간 등록은 시작일로부터 24시간 이내에만 가능합니다.");


기존이 이러한 문구였다면 Alert 창에서는 아래의 그림과 같이 출력될 것이다.


2013:08:01 10:38:08




줄도 안맞고 꼴도보기 싫어서 텍스트 내 줄바꿈을 해주면 어떨까싶었고 아래와 같이 코드를 일부 변경했다.


Alert.show("작업 기간 등록은 시작일로부터 \n 24시간 이내에만 가능합니다.");



2013:08:01 10:37:31

훨씬 보기가 좋다.



+++ 덧

\n 대신 \r도 가능하다. 둘의 차이는 외관상으로는 없어보인다. 사실 잘 모르겠당. 히힣

블로그 이미지

김생선

세상의 모든것을 어장관리

그룹 내의 여러 아이템들에 더블클릭 속성을 주기 위해서는 doubleclick이벤트를 주는 것 뿐만 아니라, doubleclick=true 속성도 주어야 한다.

블로그 이미지

김생선

세상의 모든것을 어장관리

플렉스에서 레이아웃의 할당된 크기 자체를 숨겨야 하는 경우가 있다.

안드로이드에서는 레이아웃의 visible 속성에 visible/invisible/gone 속성을 줌으로 인해서 [보이고/숨기고/할당크기까지 숨기고] 가 가능하지만, 플렉스에서는 해당 기능이 없는지 많이 고민했다.


검색해보니 includeinlayout 이라는 것이 있었고 실제로 사용해보았다.

일단 개념정리부터.


화면 컴포넌트 중에 일부를 보였다, 안 보였다 하게 제어해야 할 경우가 있다.

이것을 위해서 visible 속성에 true, false를 주면 안 보이긴 하는데 그 자리가 비어 있어서 영 보기가 안 좋다.

이럴 경우에는 includeInLayout 속성에 true, false를 주면 그 컴포넌트가 원래 코드에 포함되지 않은 것처럼 빈자리 없이 보인다.

단, 절대좌표를 가진 컴포넌트는 당연히 visible을 사용할 때와 똑같이 보일 것이고, Grid, HBox, VBox 등의 Layout Componet에 올라가 있을 경우에만 제대로 동작을 한다.

Flex 하다 보면 다들 느끼겠지만 화면크기가 모든 사용자에게 똑같으면 상관없지만 그렇지 않은 관계로 대부분의 화면 컴포넌트들을 HBox, VBox에 올려 놓고 왼쪽정렬이나 오른쪽정렬을 하는 것이 가장 편하다.


해당레이아웃.includeinlayout = false 를 주면 할당 크기까지 숨기겠다는 뜻이며, true 값은 할당 크기를 숨기지 않겠다는 뜻이 된다.

아쉽게도 안드로이드의 gone 처럼 사용하기 위해서는 해당 레이아웃.visible=false; 까지 해주어야 해당레이아웃 값 안보이고/해당레이아웃 할당크기 숨기고 가 된다.



블로그 이미지

김생선

세상의 모든것을 어장관리

Flex를 설치할 때, flash builder 4.6 을 이용하여 설치를 한다.

필자가 플래쉬 빌더를 설치한 후, 플러그인 형식으로 플래쉬 빌더의 utilities의 Adobe Flash Builder 4.6 Plug-in Utility 를 사용하여 설치를 완료했고, 이클립스에서 Flash 를 활성화 하려는데 에러 16(Error 16)의 에러메시지를 내뱉더라.


삭제 후 재설치를 하여도 되지 않는 현상, 검색을 해보니 아래와 같은 글이 있었다.


http://forums.adobe.com/thread/604540




그냥 뭐 간단히 말해주자면 해당 경로의 cache.db 파일 권한을 재설정해주라는 말이 전부다.


그럼 이쯤에서 윈도우 7 기준으로 해당 경로가 어떻게 되는지 알아보자.


C:\Program Files\Common Files\Adobe\Adobe PCD\cache

 

for 32-bit Windows

 

 

and

 

C:\Program Files (x86)\Common Files\Adobe\Adobe PCD\cache

for 64-bit Windows.


라고 ChrisPaduan 이라는 사람이 친절히 설명해놓았다.


해당 디렉토리의 cache.db를 읽기전용 해제해주면 잘 된다. 여러분, 즐 플렉 하시길 ^_^

블로그 이미지

김생선

세상의 모든것을 어장관리

티스토리 툴바