2010-10-18 32 views
4

je le code XML suivant dans mon projet Flex4 (AIR) qui définit début de mon interface de menu:permettent Programatically/désactiver les boutons de la barre de menus dans Flex 4

<mx:MenuBar x="0" y="0" width="100%" id="myMenuBar" labelField="@label" itemClick="menuChange(event)"> 
    <mx:dataProvider> 
    <s:XMLListCollection> 
    <fx:XMLList xmlns=""> 
     <menu label="File"> 
      <item label="New"/> 
      <item label="Load"/> 
      <item label="Save" enabled="false"/> 
     </menu> 
     <menu label="Help"> 
      <item label="About"/> 
     </menu> 
    </fx:XMLList> 
    </s:XMLListCollection> 
    </mx:dataProvider> 
</mx:MenuBar> 

Je suis en train de trouver la syntaxe qui permettra moi mis le bouton de sauvegarde à enabled = true après un fichier a été chargé en cliquant sur "Load", mais je ne peux pas comprendre la syntaxe, quelqu'un peut-il faire une suggestion s'il vous plaît.

Actuellement, la façon dont les clics sur les boutons sont détectés est effectuée par un test Switch/Case sur le résultat String de l'événement MenuEvent event.item. @ Label. Peut-être que ce n'est pas le meilleur moyen?

+0

Peut-être est également utile: http://www.interactiveoctopus.com/blog/index.php/2008/08/flex-programmatically-disableenable-items-in-a-menubar-component/ – ggkmath

Répondre

5

Répondre à ma propre question .... encore une fois. Qu'est-ce qu'il y a avec ce que je fais, personne ne semble vouloir répondre ???

Quoi qu'il en soit, la voici:

Il se trouve que depuis la barre de menus est défini dans XML et il est tout à fait arbitraire, cela dépend entièrement de la façon dont vous décidez de définir votre menu, dans mon cas, selon le menu XML ci-dessus, la syntaxe pour changer l'état "eanabled" du bouton Save serait la suivante.

menubarXML.item.(@label=="Save")[email protected] = "true"; 

où enubarXML est un XMLListCollection tenant la XMLList que je redéfini séparement.

[Bindable] 
     public var menuBarCollection:XMLListCollection; 

     private var menubarXML:XMLList =<> 
      <menu label="File"> 
       <menuitem label="New" data="1A"/> 
       <menuitem label="Open" data="1B"/> 
       <menuitem label="Save" data="1C" enabled="false"/> 
      </menu> 
      <menu label="Help" data="2A"> 
       <menuitem label="About" data="2A"/> 
      </menu> 
      </>; 

Ensuite, appelez cette fonction sur la complète création d'applications:

private function initCollections():void { 
      menuBarCollection = new XMLListCollection(menubarXML); 
     } 

et bien sûr la définition XML de la barre de menu (personnaliser ce besoin):

<mx:MenuBar id="myMenuBar" labelField="@label" itemClick="menuChange(event)" dataProvider="{menuBarCollection}"/> 

quelqu'un Hope trouve les fruits de mon travail utiles.

+2

Pour raison pour laquelle je ne pouvais pas faire fonctionner votre syntaxe pour moi. J'ai fini par utiliser quelque chose comme 'menubar..menuitem. (Attribute (" label ") ==" Save "). @ Enabled = true;' à la place. En outre, je ne pouvais pas comprendre pourquoi vous utilisez un 'XMLListCollection' pour le fournisseur de données. Un ancien type d'objet 'XML' fonctionne très bien et les éléments se mettent à jour correctement sur les changements dynamiques directement au XML. Y a-t-il une raison spécifique pour laquelle vous avez utilisé 'XMLListCollection'? Pas le plus grand des offres; Je pensais juste que le prochain gars pourrait trouver la "note de bas de page" d'un autre utilisateur utile. – merv

0
private var actions : Object = { 
    mi_new : mi_new, 
    mi_open : mi_open 
}; 

protected function myMenuBar_itemClickHandler(event:MenuEvent):void 
{ 
    actions[[email protected]](); 
} 

private function mi_new() : void { 
    // do new stuff 
} 

private function mi_open() : void { 
    // do open stuff 
} 

private var menubarXML:XMLList =<> 
    <menu label="File"> 
     <menuitem label="New" data="1A" action="mi_new"/> 
     <menuitem label="Open" data="1B" action="mi_open"/> 
     <menuitem label="Save" data="1C" enabled="false"/> 
    </menu> 
    <menu label="Help" data="2A"> 
     <menuitem label="About" data="2A"/> 
    </menu> 
    </>;