Laden von Flexkomponenten mithilfe von XML. Das Szenario ist so einfach wie dieses, ich brauche drei Schaltflächen in meinem Panel zu sehen, aber die Option wahr oder falsch, ob angezeigt werden soll, sollte in XML sein.Laden von Flexkomponenten mithilfe von XML
Antwort
Sie sind nicht genau in Ihrer Frage klar, also werde ich auf zwei Arten beantworten:
1. Sie benötigen ein externes MXML
In diesem Fall haben, müssen Sie kompilieren die XML-Datei mit mxmlc.exe (oder benennen Sie sie einfach in .mxml um und fügen Sie sie in Flex Builder ein) und verwenden Sie die SWFLoader-Komponente, um auf die Datei zuzugreifen. Ich habe nicht viel Erfahrung mit SWFLoader, also überlasse ich es Ihnen, nachzuschlagen.
2. Sie müssen die Eigenschaften der Komponenten durch eine externe XML setzen
ein Http erstellen, eine ID zuweisen, und verwenden Sie die URL-Eigenschaft es um Ihre XML-Datei zu verweisen. Weisen Sie kein Ergebnisformat zu. Verwenden Sie dann das Ergebnisereignis und zeigen Sie auf eine Funktion, die ausgeführt wird, wenn Ihr XML geladen wird. Es sollte wie folgt aussehen:
<mx:HTTPService id="service" url="myXml.xml" result="Foo (event)" />
Lassen Sie uns sagen myXML wie folgt aussieht:
<properties>
<button1Enabled>false</button1Enabled>
<button2Visible>true</button2Visible>
<button3Text>"TEXT"</button3Text>
</properties>
Das, was Foo sollte Ihre Funktion ist aussehen. Es wird ausgeführt, wenn HTTPServices das Laden von myXml.xml beendet.
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"
}
Diese Funktion ruft das Ergebnis des Service und weist verschiedene Tasten einige Eigenschaften wie in der XML definiert. Alternativ können Sie service.lastResult auch verwenden, um von jedem Ort des Skripts auf das neueste Ergebnis zuzugreifen.
Hoffe, das hilft!
Überprüfen Sie meinen Code, Sie könnten eine Idee bekommen. – Kevin
Auschecken appcorelib für einige nette XML-Manipulationstools zum Laden von statischen XML und Konvertieren von XML in Objekte.
// Actionscript-Code
Import 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; }
// XML Info
<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>
// Komponente
<mx:PopUpButton id="popUpButton"
label="Please select an item"
openAlways="true"
creationComplete="init();" />
Danke für Ihre Hilfe Aethex. Nun, wie komme ich zu den Menüs im popupButton.
Ich bin mir nicht sicher, was Sie meinen, aber möchten Sie Ereignislistener zu Menüs hinzufügen?
In diesem Fall nur hinzufügen:
menu12.addEventListener (event, eventHandlerFunction);
Beispiel:
menu12.addEventListener (MouseEvent.CLICK, menu12Clicked);
Flex das Ereignis in die menu12Clicked Funktion als Argument automatisch passiert. Wenn Sie mehrere Argumente haben wollten, würden Sie verwenden:
menu12.addEventListener (MouseEvent.CLICK, function (e : MouseEvent) : void {
menu12Clicked (e, "argument");
});
ich keine Erfahrung mit PopUpButtons haben, aber was haben Sie in Ihrem Code sollte Arbeit, obwohl ich, dass xmlDP Punkte auf den Tag menu12 nehmen. Ich gehe auch davon aus, dass "@label" auf das Label-Feld im Menü verweist12. Persönlich mag ich es, meine XML zu verschachteln, also würde ich nicht wissen, was das "@label" tun soll. Wenn Sie das Label innerhalb des Tags menu12 geschachtelt hätten, würden Sie xmlDP.label verwenden.
Diese Frage ist nicht klar. Vielleicht poste ein Code-Snippet, wie du denkst, dass es funktionieren sollte, oder deinen besten Versuch. –
meinst du mxml? Oder XML als DataProvider verwenden? – CookieOfFortune