FDS를 통한 RemoteObject를 사용하면, XML을 사용할 필요가 없으므로
Tree Component도 ArrayCollection으로 바인딩한다.
DB는 START WITH ~ CONNECT BY PRIOR ~ 를 이용하여 LEVEL을 구분하여 Query한다.
==ArrayCollection의 기본 구조=====================================
[Bindable]
private var MenuList:ArrayCollection = new ArrayCollection([
{ title:"상점관리", children: new ArrayCollection([
{title:"운영정보", children: new ArrayCollection([
{title:"관리자관리"}
])},
{title:"상점디자인", children: new ArrayCollection([
{title:"스킨관리"}
])}
])}]);
==================================================================
==Label Function==================================================
private function treeLabel( item:Object ) : String
{
if( item.type == "department" )
return item.title;
else
return item.name;
}
==================================================================
==Click Event 처리 Function========================================
private function onClickEventHandler():void
{
/*
if( TreeMenu.selectedItem.url != null)
{
contentLoader.source = TreeMenu.selectedItem.url.toString();
}*/
// 클릭 이벤트 처리
}
==================================================================
==Tree Component=================================================
<mx:Tree id="TreeMenu" width="100%" height="100%"
dataProvider="{MenuList}" labelFunction="getTreeLabel"
fontFamily="돋움체" fontSize = "11" click="onClickEventHandler();"/>
==================================================================
==ArrayCollection 다단계 구성용 스크립트============================
private function setValues(i:int):void{
pgmID = arr.getItemAt(i)[0].toString();
dept = arr.getItemAt(i)[2].toString();
pgmName = arr.getItemAt(i)[3].toString();
subCount = arr.getItemAt(i)[7].toString();
}
private function makeList():void{
var subCount_one:int = 0;
var subCount_two:int = 0;
var newItem_one:Boolean = true;
var newItem_two:Boolean = true;
for(var i:int = 1; i < arr.length ; i++){
trace(i);
setValues(i);
trace(pgmID);trace(dept);trace(pgmName);trace(subCount);
// Alert.show("i="+ i.toString()+" dept="+dept);
switch (dept) {
case "0":
break;
case "1":
ac_one = new ArrayCollection([{title:pgmName, url:pgmID}]);
if(subCount == "0"){
MenuList.addItem(ac_one);
}else{
subCount_one = Number(subCount);
}
newItem_one = true;
trace("newItem_one:"+newItem_one);
break;
case "2":
ac_two = new ArrayCollection([{title:pgmName, url:pgmID}]);
subCount_one--;
trace(subCount);
if(subCount == "0"){
MenuList.addItem({title:ac_one.getItemAt(0)["title"].toString(), url:ac_one.getItemAt(0)["url"].toString(), children:ac_two});
}else{
subCount_two = Number(subCount);
}
newItem_two = true;
break;
case "3":
if(newItem_two){
ac_thr = new ArrayCollection([{title:pgmName, url:pgmID}]);
newItem_two = false;
}else{
ac_thr.addItem({title:pgmName, url:pgmID});
}
subCount_two--;
trace(subCount);
trace(subCount_two);
trace(subCount_one);
if(subCount_two == 0 && newItem_one){
MenuTemp = new ArrayCollection([{title:ac_two.getItemAt(0)["title"].toString(), url:ac_two.getItemAt(0)["url"].toString(), children:ac_thr}]);
newItem_one = false;
}else if(subCount_two == 0){
MenuTemp.addItem({title:ac_two.getItemAt(0)["title"].toString(), url:ac_two.getItemAt(0)["url"].toString(), children:ac_thr});
}
if(subCount_one == 0 && subCount_two == 0){
MenuList.addItem({title:ac_one.getItemAt(0)["title"].toString(), url:ac_one.getItemAt(0)["url"].toString(), children:MenuTemp});
}
var dgar:ArrayCollection = ArrayCollection(dg1.dataProvider);
default:
break;
}
dgtemp.addItem({0:i,1:subCount_one.toString(),2:subCount_two.toString(),3:newItem_one.toString(),4:newItem_two.toString(),5:pgmID ,6:pgmName, 7:dept, 8:subCount});
}
}
==================================================================
http://cafe.naver.com/lisflex/22
'ria > flex' 카테고리의 다른 글
| ::: 최상의 유저 인터페이스 설계 방법 ::: (0) | 2008/01/21 |
|---|---|
| Tree isBranch를 강제 설정했을 때 버그 (0) | 2008/01/18 |
| ArrayCollection을 이용한 Tree Component 데이터 바인딩 (0) | 2008/01/18 |
| Flex Explorers (2) | 2008/01/18 |
| [강의자료] 웹 2.0 의 RIA 인터페이스 개발을 위한 Flex (0) | 2008/01/18 |
| Flex 오픈소스 사이트 모음 (0) | 2008/01/17 |




댓글을 달아 주세요