2009-04-30 9 views
1

Comment charger des composants flex à l'aide de XML. Le scénario est simple comme ceci, j'ai besoin de trois boutons pour apparaître dans mon panneau, mais l'option vrai ou faux d'apparaître ou non devrait être en xml.Chargement de composants flex à l'aide de xml

+0

Cette question n'est pas claire. Peut-être poster un extrait de code de la façon dont vous pensez que cela devrait fonctionner, ou votre meilleur essai. –

+0

voulez-vous dire mxml? Ou en utilisant XML en tant que dataProvider? – CookieOfFortune

Répondre

2

Vous n'êtes pas tout à fait clair dans votre question, donc je vais répondre de deux façons:

1. Vous devez avoir un MXML externe

Dans ce cas, vous devez compiler le fichier XML avec mxmlc.exe (ou simplement le renommer en .mxml et incluez-le dans Flex Builder) et utilisez le composant SWFLoader pour accéder au fichier. Je n'ai pas beaucoup d'expérience avec SWFLoader, donc je vous laisse le soin de le rechercher.

2. Vous devez définir les propriétés des composants grâce à un XML externe

Créer un HTTPService, attribuez un identifiant, et utiliser la propriété URL pour pointer vers votre fichier XML. N'attribuez pas de format de résultat. Ensuite, utilisez l'événement result et pointez sur une fonction qui s'exécutera lorsque votre fichier XML sera chargé. Il devrait ressembler à ceci:

<mx:HTTPService id="service" url="myXml.xml" result="Foo (event)" /> 

Disons que myXML ressemble à ceci:

<properties> 
    <button1Enabled>false</button1Enabled> 
    <button2Visible>true</button2Visible> 
    <button3Text>"TEXT"</button3Text> 
</properties> 

C'est ce que votre Foo fonction devrait ressembler. Il sera exécuté lorsque HTTPServices aura fini de charger myXml.xml.

private function Foo (e : ResultEvent) : void { 
    myButton.enabled = e.result.properties.button1Enabled; // false 
    myOtherButton.visible = e.result.properties.button2Visible; // true 
    myLastButton.label = e.result.button3Text; // "TEXT" 
} 

Cette fonction obtient le résultat du service et assigne à divers boutons certaines propriétés telles que définies dans le code XML. Alternativement, vous pouvez également utiliser service.lastResult pour accéder au résultat le plus récent de n'importe où dans le script.

Espérons que cela aide!

+0

Vérifiez mon code, vous pourriez avoir une idée. – Kevin

0

Jetez un coup d'œil à appcorelib pour trouver de bons outils de manipulation XML pour charger xml statique et convertir xml en objets.

0

// code ActionScript

importation mx.controls.Menu; import flash.events.MouseEvent;

 private var menu12:Menu; 

     private function init():void { 
      menu12 = new Menu(); 
      menu12.labelField = "@label"; 
      menu12.dataProvider = xmlDP; 
      menu12.showRoot = false; 
      menu12.width = popUpButton.width; 
      popUpButton.popUp = menu12; 
     } 

// Infos XML

 <menu1 label="Some introduction" /> 
     <menu2 label="Disabled State (disabled)." enabled="false" /> 
     <sep1 type="separator" /> 
     <menu3 label="parent"> 
      <menu4 label="child1" /> 
     </menu3> 
     <menu5 label="parent (disabled)" enabled="false"> 
      <menu6 label="child1" /> 
      <menu7 label="child2" /> 
      <menu8 label="child3" /> 
     </menu5> 
     <menu9 type="separator" /> 
     <menu10 type="separator" /> 
     <menu11 id="leftButton" label="Left" type="radio" groupName="radioGroup" toggled="true" enabled="true" /> 
     <menu12 id="rightButton" label="Right" type="radio" groupName="radioGroup" enabled="false" /> 
     <menu13 id="popupButton" label="Popup" type="radio" groupName="radioGroup" enabled="false" /> 

    </root> 

// composant

<mx:PopUpButton id="popUpButton" 
      label="Please select an item" 
      openAlways="true" 
      creationComplete="init();" /> 

Merci pour votre aide Aethex. Maintenant, comment se fait-il que je voudrais ajouter des événements aux menus dans le popupButton.

0

Je ne suis pas sûr de ce que vous voulez dire, mais voulez-vous ajouter des écouteurs d'événements aux menus?

Dans ce cas, il suffit d'ajouter:

menu12.addEventListener (event, eventHandlerFunction); 

Exemple:

menu12.addEventListener (MouseEvent.CLICK, menu12Clicked); 

Flex passe automatiquement l'événement dans la fonction menu12Clicked comme argument. Si vous voulez avoir plusieurs arguments, vous utilisez:

menu12.addEventListener (MouseEvent.CLICK, function (e : MouseEvent) : void { 
    menu12Clicked (e, "argument"); 
}); 

Je n'ai pas d'expérience avec PopUpButtons, mais ce que vous avez dans votre code devrait travail, même si je suppose que les points xmlDP à l'étiquette menu12. Je suppose également que "@label" pointe vers le champ label défini dans le menu12. Personnellement, j'aime imbriquer mon XML, donc je ne saurais pas ce que le "@ label" est censé faire. Si l'étiquette était imbriquée dans la balise menu12, vous utiliseriez xmlDP.label.

Questions connexes