2012-10-05 26 views
0

使用actionscript 3,有人可以舉例說明如何動態更改下面的子菜單項?Flex/AS3/XML:如何動態更改用於Flex子菜單的XMLList?

<fx:Declarations> 
<fx:XMLList id="menuData" xmlns=""> 
    <menuitem label="Column A"> 
      <menuitem label="Item A.1"/> 
      <menuitem label="Item A.2"/> 
    </menuitem> 
    <menuitem label="Column B"> 
      <menuitem id="ItemB1" label="B.1"/> 
      <menuitem type="separator"/> 
      <menuitem label="Item B.2" type="check"/> 
      <menuitem label="Item B.3" type="check"/> 
      <menuitem id="myId" label="Item B.4"> 
       <menuitem label="SubItem B.4.1"/> 
       <menuitem label="SubItem B.4.2"/> 
      </menuitem> 
    </menuitem> 
     ... 
</fx:XMLList> 
<fx:Declarations> 
... 
<mx:MenuBar dataProvider="{menuData}" .../> 

例如,假設我們要替換子菜單項B.4.1和B.4.2有:通過其標籤

<menuitem label="SubItem abc"/> 
<menuitem label="SubItem def"/> 
<menuitem label="SubItem ghi"/> 

回答

2

抓取該項目,或更好的,給它一個ID,並使用該檢索它,然後replace its children

您可以輕鬆地做到這一點利用E4X

var item:XMLList = menuData..menuitem.(attribute('label') == "Item B.4"); 

var subItems:XML = 
    <items> 
     <menuitem label="SubItem abc"/> 
     <menuitem label="SubItem def"/> 
     <menuitem label="SubItem ghi"/> 
    </items>; 

item.setChildren(subItems.menuitem); 

有關此主題的更多信息,請參閱http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/XML.html

+0

謝謝ndm,這是我非常想找的。我爲項目B.4添加了一個ID。如上所示,我如何通過Id獲取該項目?會是:var item:XMLList = menuData..menuitem。(@ id =='myId')'?我是否需要使其中一個變量可綁定才能進行更改?謝謝 – ggkmath

+1

只需交換E4X表達式中的值,即用'id'替換'label',用'myId'替換'Item B.4'。我只建議使用一個ID,以便您可以在不中斷訪問表達式的情況下更改標籤。 – ndm

+1

不,你不需要做任何可綁定的事情,XMLList已經被綁定爲一個數據存儲器,並且MenuBar組件將自動註冊對它進行的更改。 – ndm