ArrayCollection 에 담긴 데이터를 정렬할 일이 생겼다.

ArrayCollection 은 아니지만 비슷한 유형이라 관련 자료를 찾아 보았는데, ActionScript 3.4 reference에 간략한 소스와 함께 나와 있었다.

그것을 따라하면 별 다른 문제 없이 정렬이 된다.

물론 참고해야 될 것은 ArrayCollection만이 아닌 Sort, SortField 이렇게 3개를 참고해야 한다.




아래 참고 소스는 ActinoScript 3.4 reference에서 참고 한 것이다.



 
     var col:ICollectionView = new ArrayCollection();
// In the real world, the collection would have more than one item.
col.addItem({first:"Anders", last:"Dickerson"});
// Create the Sort instance.
var sort:Sort = new Sort();
// Set the sort field; sort on the last name first, first name second.
// Both fields are case-insensitive.
sort.fields = [new SortField("last",true), new SortField("first",true)];
// Assign the Sort object to the view.
col.sort = sort;
// Apply the sort to the collection.
col.refresh();



 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="200" height="135" borderStyle="solid" layout="absolute" backgroundColor="#EFEFEF">
    <mx:Script>
        <![CDATA[
        
            import mx.collections.Sort;
            import mx.collections.SortField;
            import mx.collections.ArrayCollection;
            
            [Bindable]
            private var array:ArrayCollection;
            private var numFlag:Boolean = false;
            private var txtFlag:Boolean = false;
            
            
            /**
             *         @function        : initApp
             *         @param            : none
             *         @description    : ArrayCollection instance와 데이터 추가
             *
             * */
            private function initApp():void
            {
                array = new ArrayCollection();                ///< ArrayCollection instance
                
                array.addItem({NUM:100, TXT:"AAAAA"});        ///< add item
                array.addItem({NUM:1, TXT:"CCCCC"});
                array.addItem({NUM:10, TXT:"BBBBB"});

            }

            /**
             *         @function        :    numClickEvent
             *         @param            :    none
             *         @description    :    numFlag 를 참조하여 오름차순, 내림찬순으로 정렬한다.
             * */            
            private function numClickEvent():void
            {
                if( array != null )        ///< 만약 초기화를 통해 null이 아니라면
                {
                    var sort:Sort = new Sort();
                    sort.fields = [ new SortField("NUM", true, numFlag) ];
                    array.sort = sort;            ///< ArrayCollection 내 sort에 대입한다
                    array.refresh();            ///< 컴포넌트를 갱신한다
                    numFlag = !numFlag;
                }                
            }            
            
            /**
             *         @function        :    txtClickEvent
             *         @param            :    none
             *         @description    :    txtFlag 를 참조하여 오름차순, 내림찬순으로 정렬한다.
             * */
            private function txtClickEvent():void
            {
                if( array != null )        ///< 만약 초기화를 통해 null이 아니라면
                {
                    var sort:Sort = new Sort();
                    sort.fields = [ new SortField("TXT", true, txtFlag) ];
                    array.sort = sort;            ///< ArrayCollection 내 sort에 대입한다
                    array.refresh();            ///< 컴포넌트를 갱신한다
                    txtFlag = !txtFlag;
                }
            }
            
        ]]>
    </mx:Script>
    
    <mx:DataGrid width="100%" height="100" dataProvider="{array}" editable="false" sortableColumns="false" creationComplete="initApp()" />
    <mx:HBox width="100%" height="25" bottom="3" horizontalCenter="0" horizontalAlign="center">
        <mx:Button width="100%" label="NUM" click="numClickEvent()"/>            
        <mx:Button width="100%" label="TXT" click="txtClickEvent()"/>
    </mx:HBox>
    
</mx:Application>


아래는 결과 swf 파일.
NUM 버튼을 누르면 NUM 정렬이, TXT를 누르면 TXT 정렬이 된다.
(두번 눌렀을 경우 역순으로 정렬)








FLEX 작업중 몇일째 보는 녀석이다.

그전에는 잘못된 사용으로 인해 null 객체 참조가 일어나는 것으로 알았다.
그래서 많은 시간이 흐르는 동안 "방치" 해 두고 다른 작업을 하고 있었다.

역시... 묵혀 놓으면 곪아서 터진다고, 중요한 시기에 적절한 해결책을 찾지 않고 넘어간 덕분에 이곳저곳에서 빵빵 터졌다. 깨알같은 버그와 에러들 ... (박명수씨 버전으로 하면 재미있을까 ... 깨알같은 웃음 :))

수분(혹은 수시간)을 검색하던 중 addChild 라는 녀석에 의해 이런 현상이 발생한다고 한다.
UIComponent가 load 되는 와중에 addChild를 수행하게 되면 null ( 당연하겠지만, 결혼도 하지 않은 처녀에게 애를 가지라고 하니 황당할 따름. 물론 성모 마리아는 예외다) 값으로 뱉어 버리는 ㅡㅡ..

찾고나서 링크를 저장해 놨어야 하는데, 저장하지 못한 점과 직접 실험을 통해 해결하지 못하였기에 확답을 못하겠지만 찾은 내용으로 봐서는 Load가 완료되는 시점( event 이긴 한데 무슨 STATE가 들어 있었다 )에 이런 addChild 같은 수행을 하는 녀석을 하면 에러가 없다고 한다.

그것 말고도 creationPolicy = "all" 을 하면 된다고 하는데
ex:) <mx:Canvas 생략 creationPolicy="all" />
로 하면 생성할 당시에 이런 빌어먹을 #1009 에러가 해결된다고 하는 몇몇 블로거들의 답변을 봤는데, 안된다.. ㅠ_ㅠ 아마 사용하는 시점에 대해 이해가 부족해서 일듯 ㅡㅡ:

조만간 네이버 카페 서비스 점검이 끝나면 더 찾아 봐야겠다.

아직도 Flex event flow에 대한 이해가 부족해서 이렇게 버벅거리는 듯 ㅠ_ㅠ


일단 다시 전진 전진 !

정상적으로 해결책을 찾으면 간단한 예제와 함께 포스팅을 ㅠ_ㅠ



 Flex를 하다가 보니 여러모루 ActionScript를 가지고 코딩해야 할 것들이 많았다.
 물론 도서를 구입하고 책을 보며 하다 보니 대부분의 내용이 ActionScript 3.0 에 관한거라 Trace 함수를 사용해서 콘솔에 결과값을 출력해 주는게 다였다. 그래픽 작업도 있지만서도 ...
 흔히 하는 것처럼 코드를 작성하고 CTL+F11 을 눌러(혹은 ▶ 버튼을 누르면) 실행을 할려하는데 아닌 이게 왠걸 ?
 Trace 함수가 작동하지 않는다 ?!

 그래서 인터넷을 잠시 검색해 봤다. Trace함수는 Debugger Flash player에서 동작한다고 한다(정확한 정보는 아니니... 검색을 통해 정확한 지식을 습득하는게 좋을 듯 합니다. ㅡㅡ : 하지만 Flex builder로 실행하려고 하면 현재의 Flash player는 안된다고 나옵니다. 디버그 모드가 내장된게 아니라서 말이죠)
 아무튼, Adobe 사에 올려진 디버거 버젼의 플래쉬 플레이어를 설치하고 나니, FLEX Builder 아래에 결과창이 정상적으로 출력!!





자 일단 > 어도비 에 들어 가신후 ...


아래에서 입맛대로 골라 다운을 받습니다. 그런다음, 설치 하시면 되요~ 그럼 디버거 버젼 플래쉬 플레이어 설치 완료 !



Source

package {
    import flash.display.Sprite;

    public class Test_ActionScript1 extends Sprite
    {
        public function Test_ActionScript1()
        {
            trace("안녕하세요");
        }
    }
}



Result



 이렇게 아래에 Console창에 결과물이 출력된다.
 블로그들을 이리저리 뒤지다 보면 Log도 Debugger 모드를 사용해서 볼수 있다고 하는데, 일단 내 앞길이 바빠서 이만 ㅋ










 다른 것들과 마찬가지로 사용자가 원하는 만큼 객체들을 생성할 수 있다.
 이때, 주의해야 하는 것은 "addChild( Object )" 부분인데 해당 컨테이너(Object와 같은 뭔가를 담는 그릇)에 추가시켜 주어야 한다.
 기본적으로 작업하는 mxml의 페이지가 최상위가 되므로 해당 페이지에 addChild를 통해 넣고자 하는 것들을 담아 주면, 원하는 결과물이 화면에 갱신되어 보여진다.



Resource


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
<mx:Script>
    <![CDATA[
        private var pos_x:int = 0;
        private var pos_y:int = 0;
       
        public function createPanel():void
        {
            var v_button:Button = new Button();
            v_button.x = 0 + (pos_x += 5);
            v_button.y = 20 + (pos_y += 5);
            this.addChild( v_button );
        }       
    ]]>
</mx:Script>
    <mx:Button label="CreateButton" click="createPanel();"/>   
</mx:Application>



Result



Source는 CreateButton(자식 버튼을 생성하는 이벤트가 걸린 버튼)을 누르면 아래 소형 버튼이 생성되는 코드다.





WCF 프로젝트를 처음 생성하면

IService1.cs
Service1.svc
 - Service1.svc.cs
Web.config

이라는 파일이 생성된다.

 IService1.cs 에는 [ServiceContract]로 선언된 Service 요청이 성공하였을 때 해당 서비스를 외부에서 namespace등을 접근을 하기 위한 기능들로 구성되어 있다.
 예를 들면 내부에 Service1.svc 에서 선언되고 구현되어진 코드들(메소드)을 IService1.cs에서 [OperationContract]라는 메타데이터로 선언되어 외부에서 사용가능한 기능들의 모음으로 구성되어 있다.

 Web.config 아네는 Web Service시에 필요한 설정값들이 저장되어 있다. 일예로 SOAP 서비스를 할때, 어떤 규약으로 데이터를 전송할 것인지에 대한 정보가 담겨져 있다. 추가적으로 Local에서 작업을 할 것인지, 혹은 외부로 노출을 시킬 것인지에 대한 것도 담겨져 있다.
 기본적인 수정법은 Web.config 내의 코드 라인중


  <system.serviceModel>
  <services>
  <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
  <!-- Service Endpoints -->
  <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1">


윗 부분을 수정해 주면 된다. WCF 책 내용중에 HttpBinding의 종류는 여러개지만 이기종간의 데이터 통신의 기본인 TCP방식을 통한 전송을 위해서 basicHttpBinding을 사용해야 한다고 적혀 있다.

to be continue ...


(링크를 클릭하세요 Daum 뉴스로 이동합니다)

방금전에 DAUM IT 섹션 뉴스에 위의 링크 내용의 기사가 떴다.


수많은 댓글에는 개념찬 기사라고 하는데 요약하면

  세계 표준을 역행하는 현재의 대한민국의 상황은 이전 일본이 자기들만의 표준을 앞세워 선점했다 실패한 유형을 따라하고 있다. 기사에서 제공된 일본과 프랑스의 예를들어 현재의 우리의 이런 정책은 향후 우리만의 틀 안에 고립되어 퇴보되거나 혹은 그나마 자생하고 있던 IT를 죽이는 것이 될 수 있을 것이다.

 기사에서는 그동안 문제가 되는 원인들을 콕 집어서 과거의 경험에 미뤄 지금의 현실이 왜 잘못된 방향으로 흘러가는지 설명하고 있다.

 다들 아마 역행하는 현정부의 정책에 공감하는 것일터... 저작권은 당연히 정부에서 말하는 것처럼 지켜줘야 하는 거지만, 자율적인 의식 개혁없이 법에 의한 통제를 하려고 하다 보면 분명 다른 한쪽에서 희생되는 것이 있을 것이다. 일단 지금의 정부는 밀어 붙여 놓고 잘되면 내탓, 못되면 남탓. 그러다가 책임 물어 보면 어쩌라고 하며 발뺌 ?

 예전에 모 기사에서 언급한 "경험이란 좋은 재산은 역으로 자신의 발전에 독이 될수 있다" 란 것을 다시금 생각나게 하는 기사.



- 꼬리
 자신들은 지키지 않는 법으로 통제를 한다는 것조차 우습다. 더군다나 유년시절 교육에서 오는 기본적인 인성조차 엉망으로 가리키는 현 교육 체계에서 자율적인 저작권 의식을 고취하기에는 무리이지 않은가? 항상 일본과 미국에서 말아 먹었던 정책이 선진국이라고 가지고 오지 말고, 그들이 실패한 경험을 고쳐 우리에게 맞게 적용하던가 아님 그들의 좋은(ex: 교육 및 사회 복지)점만을 얌체처럼 가져와 쓸수 없는가?
 나라 정치 하시는 분들은 자신의 주머니 돈과 자신의 정당과 관련된 것은 얌체같이 챙기면서 서민들과 관련된 것은 저렇게 생색을 내며 하지 않으려고 하는가? 이번해는 힘든 것 같지만, 다음 해부턴 밝은 소식이 뉴스에 나왔으면 좋겠다.





+ Recent posts