2014-01-30 29 views
0

我拉動一個datadic.xml文件來填充動作腳本3.0中的組合框,但我想在每個節之間爲前11個屬性添加一箇中斷或標題,然後再打破,然後是最後的26個屬性。這是我的XML文件的一部分:如何從外部XML文件添加中斷組合框中的中斷?

<codeSet> 
<title>Census: population estimates for Northern Ireland </title> 
<subtitle>By country, region and local authority</subtitle> 
<txtSource>2011 Census</txtSource> 
<txtSource2>2001Census</txtSource2> 
<dateStart>2001</dateStart> 
<dateEnd>2011</dateEnd> 
<code id='94NI'>NORTHERN IRELAND</code> 
<code id='N09000001'>Antrim and Newtownabbey</code> 

然後動作自動加載XML,並創建一個函數調用的setlists這是一個簡單的循環來填充組合框,但現在我想提出一個休息所以應該是北愛爾蘭(休息)安特里姆和紐敦阿比隨後10(休息)等等。 ActionScript代碼:

function setLists():void 
{ 
    var menuLength:int = xmlCodes.code.length(); 
    for (var i:int=0; i<menuLength; i++) 
     { 
      myVarList1.addItem({label:xmlCodes.code[i].text(), data:xmlCodes.code[i][email protected]}); 
      myVarList2.addItem({label:xmlCodes.code[i].text(), data:xmlCodes.code[i][email protected]}); 

      if (

     } 

回答

0

如果它總是將是相同數量的標題之下的元素,嘗試這樣的事情:

function setLists():void 
{ 
    var menuLength:int = xmlCodes.code.length(); 

    // I'm basing the "breaks" variable on this flow: title, break, 11 items, break, title, break, 26 items 
    // 
    var breaks:int = 3; 
    var breakCount:int = 0; 
    // Note we've added "breaks" to our menuLength 
    // 
    for (var i:int=0; i<menuLength + breaks; i++) 
     { 
      // 1, 12, and 14 are where we add breaks based on the flow mentioned above 
      // 
      if (i == 1 || i == 12 || i == 14) { 
       myVarList1.addItem({label:' ', data:null); 
       myVarList2.addItem({label:' ', data:null); 
       breakCount++; 
      } else { 
       myVarList1.addItem({label:xmlCodes.code[i-breakCount].text(), data:xmlCodes.code[i][email protected]}); 
       myVarList2.addItem({label:xmlCodes.code[i-breakCount].text(), data:xmlCodes.code[i][email protected]}); 
      } 
     } 
+0

因此,我認爲在正確的位置有中斷,但是當您單擊一個空標籤時,它期望數據在那裏並使閃存應用程序崩潰。有沒有什麼辦法可以讓你無法點擊休息。爲什麼break變量設置爲3? – DanDan4561

+0

想不到停止中斷點擊的方法,但是如果您修改了檢查選定項目的數據以檢查您選擇的null或其他某些自定義數據(如斷路器或其他)的函數並讓它發生錯誤消息指導用戶確保他們選擇一個實際的選項。我以爲你想要3次休息;一個在第一個標題之後,一個在下一個標題之前,一個在該標題之後。根據需要調整。 – Frankenscarf

+0

啊是對不起,愚蠢的時刻,但謝謝你的幫助讓它工作,最終非常感謝。 – DanDan4561

0

我認爲還有的「類別之間的id格式的差異「和他們的」孩子「?另外,XML提供了一個具有以下模式的排序列表?

  • CATEGORY1
  • child1
  • 的child2
  • [...]
  • child3
  • CATEGORY2
  • child1
  • 的child2
  • [...]
  • child3

如果這樣你就可以揣摩什麼區別的「類別」和他們的「孩子」之間的ID。其中一種方法是創建一個regular expression,它只匹配屬於類別的ID,並在獲得匹配時採取不同的行爲。

實施例:

var categoryIdPattern:RegExp = /^\d{2,3}\w{2,3}$/; // Matches only strings consisting of 2-3 numbers followed by 2-3 word characters 

var menuLength:int = xmlCodes.code.length(); 
for (var i:int = 0; i < menuLength; i++) { 
    myVarList1.addItem({label:xmlCodes.code[i].text(), data:xmlCodes.code[i][email protected]}); 
    if (categoryIdPattern.exec(xmlCodes.code[i][email protected] as String) != null) { 
     //This is a category, add an empty row beneath the newly added value in the combobox 
     myVarList1.addItem({label:"", data:null}); 
    } 
} 

編輯:我要補充的是,上述代碼是未測試的而僅示出的概念。

0

我所做的到底是創建一個新類來覆蓋數據setter方法,所以我可以將值設置爲「已禁用:真正的」打電話時我的setlists功能

在下拉列表

var myVarList1:ComboBox = new ComboBox(); 
var myVarList2:ComboBox = new ComboBox(); 
myVarList1.dropdown.setStyle("cellRenderer", MyCustomCellRenderer); 
myVarList2.dropdown.setStyle("cellRenderer", MyCustomCellRenderer); 

然後

function setLists():void 
    { 
     var menuLength:int = xmlCodes.code.length(); 
     var breaks:int = 3; 
     var breaksCount:int = 0; 

    for (var i:int=0; i<menuLength; i++) 
     { 

      if(i == 1){ 

       myVarList1.addItem({label: " ", disabled:true}); 
       myVarList2.addItem({label: " ", disabled:true});     
       breaksCount++; 
      } 
       else if (i == 11){ 
       myVarList1.addItem({label: " ", disabled:true}); 
       myVarList2.addItem({label: " ", disabled:true});      
       breaksCount++; 
       } 

      else { 

      myVarList1.addItem({label:xmlCodes.code[i].text(), data:xmlCodes.code[i][email protected]}); 
      myVarList2.addItem({label:xmlCodes.code[i].text(), data:xmlCodes.code[i][email protected]}); 
      } 
     } 

這是允許您將值設置爲禁用的自定義功能。

package { 
    import fl.controls.listClasses.CellRenderer; 
    public class MyCustomCellRenderer extends CellRenderer 
    { 
     // override the data setter to set the enabled flag 
     override public function set data(value:Object):void 
     { 
      super.data = value;  
      this.enabled = !(value['disabled']); 
     } 
    } 
}