BLOG main image
Category (342)
MySpace (89)
Astronomy (50)
Development (178)
Drum (25)
linux에서 subversion설정
누리에 없을 자그마한 자국
살라딘의 생각
saladin's me2DAY
3D Avata - BuddyPoke
기찬 개발이야기
[FLEX] ANT로 ASDOC 사용하기
THLIFE.net
Flash10 대응 Textcube 1.7.5.1..
텍스트큐브 공지사항
«   2008년 11월   »
            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            
325617 Visitors up to today!
Today 117 hit, Yesterday 963 hit
/Development/Flex/AIR 관련글 보기 2007년 04월 11일 00시 35분


이 자료는 Flex를 이용해 Tree를 이용하여 메뉴를 만드는데 기초가 되는 자료이다.
최종적인 목표는 다음과 같다.
  1. 서버로부터 XML로 구성된 Meun데이타를 HttpService를 통해 받아와 Tree컴포넌트에 바인드
  2. Drag&Drop을 이용하여 각 item 위치 수정후 서버에 Menu구성 Update, HTTPSerivce이용
  3. Double Click을 이용하여 item의 이름정보 및 값을 수정하여 서버에 전송하여 Menu Table Update
  4. 선택한 메뉴(글)삭제, 서버 Update실시
  5. 선택시 Javascript와 통신하여 해당 명령 수행(가령, 글을 보여주는 기능)
  6. Javascript로 부터 명령을 받아 원하는 내용이 속한 폴더를 expand

여기에서는 1번을 구현하고자 한다. 이를 구성하기 위해서 기본적으로 mx.rpc.http.HTTPService에 대해서 알필요가 있고 XML데이타를 받기위해 무엇을 준비해야하는가 생각할 필요 있다.

먼저 사용할 XML 데이타는 다음과 같다. 이 XML데이타는 이미 만들어져 있는 경우이지만 PHP나 ASP와 같은 웹프로그램으로 DB로 부터 해당정보를 읽어와 동적으로 만들 수도 있을 것이다. 여기서 msg는 ok가 있는 이유는 XML를 요청한 곳에 이 데이타는 DB로 부터 제대로 읽어왔음을 뜻하는 표시로 사용되며 만약 error가 있는 경우 다른 msg를 넣으면 된다.

<?xml version="1.0" encoding="utf-8" ?>
<root>
 <msg>ok</msg>
  <nodes>
  <node  data="1" label="메뉴 1">
   <node  data="1" label="1-1"/>
   <node  data="2" label="1-2"/>
  </node >
  <node  data="3" label="메뉴 2">
   <node  data="4" label="2-1"/>
   <node  data="5" label="2-2"/>
   <node  data="6" label="2-3"/>
   <node  data="7" label="메뉴 3">
    <node  data="8" label="3-1"/>
    <node  data="9" label="3-2"/>
   </node>
  </node>
 </nodes>
</root>
   

아래 소스는 위의 XML 파일을 HTTPService를 이용해 읽어와 Tree에 바인드하는 예제이다.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
 creationComplete="init()" initialize="System.useCodePage=true">
 
 <mx:Style>
  Application
  {
   fontSize:12pt;
  }
 </mx:Style>
 <mx:Script>
  <![CDATA[
   import mx.collections.*;
   import mx.controls.Alert;
   import mx.rpc.events.FaultEvent;
   import mx.rpc.events.ResultEvent;
   import mx.rpc.http.HTTPService;

   public var httpServ:HTTPService;
   
   [Bindable]
   public var xlcData:XMLListCollection;
   
   ////////////////////////////////////////////
   // 초기화
   // 1. HTTPSerivce를 생성
   // 2. 바로 서버로부터 XML 데이타를 요청한다.
   ////////////////////////////////////////////
   public function init():void
   {
    httpServ = new HTTPService();
    request("http://localhost/Path/category.xml");
   }  
   
   ////////////////////////////////////////////
   // XML 요청
   // 1. POST방식으로 결과물을 E4X형태로 한다.
   // 2. 결과를 받기 위해 Listener Handler함수를 선언
   ////////////////////////////////////////////
   public function request(url:String, params:Object=null):void
   {
    this.httpServ.url = url;
    this.httpServ.method = "POST";
    this.httpServ.resultFormat="e4x";
    this.httpServ.addEventListener("result", resultHandler);
    this.httpServ.addEventListener("fault", faultHandler);
    this.httpServ.send(params);
   }

   ////////////////////////////////////////////
   // XML 결과를 받았을 경우
   // 1. XMLList에 결과를 임시로 저장
   // 2. 적합한 데이타인지 확인
   // 3. nodes요소만 XMLListCollection으로 생성
   // 이는 동적으로 Tree에 바인드[Bindable]됨
   ////////////////////////////////////////////  
   public function resultHandler(e:ResultEvent):void
   {
    var xlData:XMLList = new XMLList(e.result);
    if(xlData.elements("msg").toString()!="ok")
    {
     mx.controls.Alert.show(xlData.elements("msg").toString(),"Error");
    }
    else
    {
     xlcData = new XMLListCollection(xlData.elements("nodes"));
    }       
   }
   
   ////////////////////////////////////////////
   // XML 데이타 요청에 대한 실패가 있을 경우 호출됨
   ////////////////////////////////////////////  
   public function faultHandler(e:FaultEvent):void
   {
    mx.controls.Alert.show("데이타를 읽는 중 에러\n"+e.fault.faultString);
   }

  ]]>
 </mx:Script>
 <mx:Panel width="100%" height="200" layout="absolute" title="Tree와 HttpService 수정 - 지돌스타(jidolstar.com)">
  <mx:Tree id="trCategory" 
   labelField="@label"
   dataProvider="{xlcData}"
   showRoot="false"
   dragMoveEnabled="true"
   x="0" y="0" width="100%" height="100%"/>  
 </mx:Panel>
 
</mx:Application>


아래 파일은 XML 데이타와 프로그램 소스파일이다.



글쓴이 : 지돌스타(http://blog.jidolstar.com/17)

이 글의 관련글
Trackback Address :: http://blog.jidolstar.com/trackback/17
Tracked from 지돌스타 블로그 | 2007년 04월 11일 19시 12분 | DEL
위의 소스는 FlexComponent 카페에서 시난님이 만든 "XML의 자식을 가지고 있는 마지막 노드 알아내기(http://cafe.naver.com/flexcomponent/3755)" 글을 보고 아이디어를 얻었다. 시난님이 이것을 만들게 된 계기는 동기는 카페 주인장이신 브라이언 님이 WithFlex.com에서 운영할 Flex로 만든 트리메뉴를 같이 만들자고 제안을 했기 때문이다. 그렇지 않아도 Tree메뉴가 필요할 것 같아서 만들려고 하던 참..
BlogIcon addlayer | 2007년 04월 11일 10시 14분 | PERMALINK | EDIT/DEL | REPLY
멋져용~
god35 | 2008년 01월 31일 17시 18분 | PERMALINK | EDIT/DEL | REPLY
안녕하십니까~

플렉스에 관심을 가지게 되어 이제 막 공부하고 있는데 궁금한것이 있어 이렇게 글을 남깁니다.
위에서 구현하신 트리컴포넌트의 값을 선택했을때 선택된 값을 PHP 나 HTML 페이지에서 받을려면 어떻게 구현해야될까요?

위에서 말씀하신 5.선택시 Javascript와 통신하여 해당 명령 수행(가령, 글을 보여주는 기능) 과 비슷한 내용같은데 꼭좀 가르쳐 주세요~
Name
Password
Homepage
Secret