2014-01-21 3 views
0

XML 파일을 읽고 무작위 순서로 모든 요소를 ​​ComboBox에 추가하려고합니다 (이 방법은 모릅니다). Primary_CB라는 단계에서 ComboBox를 제작했습니다. 내가 만들 것 어떻게AS3 절차. XMl에서 Combobox의 항목의 무작위 순서

<data> 

<elements> 

    <element1> 
     <primary>Male Character</primary> 
    </element1> 
    <element1> 
     <primary>Female Character</primary> 
    </element1> 

</elements> 

</data> 
내 AS3은 기본적으로 XML 파일을 읽어 때문에 같은 콤보 상자에 내용을 채 웁니다

...

Primary_CB.prompt = "Items"; 

var xmlLoader:URLLoader = new URLLoader(); 
var xmlData:XML = new XML(); 
var xmlAry:Array = new Array(); 
var xmlURL:Array = new Array(); 

xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 
xmlLoader.load(new URLRequest("IdeaElements.xml")); 

function LoadXML(e:Event):void 
{ 
    xmlData = new XML(e.target.data); 
    trace(xmlData..primary.length()); 
    for (var i:uint=0; i<xmlData..primary.length(); i++) 
    { 
     xmlAry.push(xmlData..primary[i]); 
     xmlURL.push(xmlData..url[i]); 
     Primary_CB.addItem({ label: xmlAry[i], data:i }); 
     Primary_CB.addEventListener(Event.CHANGE, action); 
    } 
} 

function action(e:Event):void 
{ 
    var no:Number = Number(Primary_CB.selectedItem.data); 
    trace(xmlURL[no]); 
} 

내 XML 다음과 같은 형식으로 설정을 모두 가지고 ... 그것은 요소의 순서를 무작위로 만들고 ComboBox의 프롬프트에 목록의 첫 번째 요소를 추가합니까?

답변

0
Primary_CB.prompt = "Items"; 

var xmlLoader:URLLoader = new URLLoader(); 
var xmlData:XML = new XML(); 
var xmlAry:Array = new Array(); 
var xmlURL:Array = new Array(); 

xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 
xmlLoader.load(new URLRequest("IdeaElements.xml")); 

function LoadXML(e:Event):void 
{ 
    xmlData = new XML(e.target.data); 
    trace(xmlData..primary.length()); 
    var tempXMLAry:Array = new Array(); 
    var tempUrlAry:Array = new Array(); 
    var i:uint; 
    for (i = 0; i<xmlData..primary.length(); i++) 
    { 
     tempXMLAry.push(xmlData..primary[i]); 
     tempUrlAry.push(xmlData..url[i]); 
    } 
    var tLen:int = tempXMLAry.length; // Store that value as it is here, because it will change during the loop 
    for (i = 0; i < tLen; i++) { 
     var rnd:int = Math.round(Math.random() * (tempXMLAry.length - 1)); 
     xmlAry.push(tempXMLAry[rnd]); 
     xmlURL.push(tempUrlAry[rnd]); 
     tempXMLAry.splice(rnd, 1); 
     tempUrlAry.splice(rnd, 1); 
    } 
    for (i = 0; i < xmlAry.length; i++) { 
     Primary_CB.addItem({ label: xmlAry[i], data:i }); 
    } 
    Primary_CB.selectedIndex = 0; 
    Primary_CB.addEventListener(Event.CHANGE, action); 
} 

function action(e:Event):void 
{ 
    var no:Number = Number(Primary_CB.selectedItem.data); 
    trace(xmlURL[no]); 
} 

이것은 내가 생각해 낸 것입니다. 이미 가지고있는 것과 매우 비슷합니다. 무슨 일입니다 : 임시 배열의

  1. 여분의 쌍
  2. 이 배열
  3. 이 배열은 값이 세계에서 읽어
  4. 글로벌 배열로 단행 된 XML 목록에서 채워집니다 생성
  5. 콤보 selectedIndex 속성을 1로 설정 (그래서 목록에서 첫 번째 객체를 하이라이트)
하는 콤보로 배열

다음은 배열을 정렬하는 여러 가지 방법이있는 페이지입니다. 위의 샘플에서는 접합 방식을 사용했습니다. http://dev.tutsplus.com/tutorials/quick-tip-how-to-randomly-shuffle-an-array-in-as3--active-8776

0

배열의 모든 요소를 ​​먼저 푸시 한 다음 다시 셔플하십시오 (). CB에 추가하십시오. 배열을 섞는 것은 상당히 간단합니다. 그냥 여기 상단 답을 사용 (하지만 AS3 구문 사용) :

How to randomize (shuffle) a JavaScript array?

(. 당신이 그것을 사용하는 다른 계획이 없다면 당신의 Event.CHANGE의 EventListener & 기능을 잃을 수)