PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Im FlexBuilder auf die property "id" zugreifen


Ghoose
31.10.2007, 12:58
Hallo,

ich stehe gerade vor einem Problem und befürchte, dass es nicht zu lösen geht. Folgendes möchte ich machen:

Ich bastel gerade ein kleines Framework/Library für unsere Designer. Um die Datenhandhabung (Listen, Trees, etc) so einfach wie möglich zu gestalten, habe ich "DatenComponenten" erstellt, damit man im DesignMode z.b. eine Liste editieren kann. Dazu benutze ich die multiline Eingabemöglichkeit einer Text-Komponente, die dann bei jeder Text-Änderung die Liste generiert (\n bzw. newline separiert). So kann der Designer einen einfachen Doppelklick auf die Komponente machen, die Liste grafisch ändern und später darauf referenzieren.

Nun zum Problem: Ich hätte gerne, dass er als Label der ListenKomponente die ID anzeigt (damit man diese sofort sehen und dann als dataProvider referenzieren kann). Der FlexBuilder zeigt zwar im propertyView brav die ID der Komponente an, dummerweise kann ich aber in der Klasse selbst noch nicht auf die ID zugreifen (value=null). In der Runtime funktioniert zwar alles, aber das bringt mir nichts.

Hier sehe ich das Hauptproblem: Der DesignMode vom FlexBuilder übergibt die in MXML gesetzte ID nicht der Klasse/dem Objekt.
Nun habe ich das auch andersherum probiert, dass ich eine zweite id-property "myid" deklariere und in der Runtime dann der eigentlichen id, die myid zuweise - also während der Runtime die id der Komponente ändere. Das funktioniert nicht, da Flex in der Runtime die ID nicht ändern kann. (Application/WindowedApplication sind nicht dynamisch, Flex möchte aber beim Ändern der ID eine neue index-property in der Application anlegen, um die IDs zu referenzieren)

Ich sehe jetzt keine Möglichkeit mehr, eine ID im FlexBuilder abzufragen. Ist das richtig?

Habt ihr evtl. Vorschläge zum allgemeinen Vorgehen (ich meine jetzt wegen der einfachen Editierbarkeit der Listen, etc?). Leider liefert der Flex Builder da nichts von Haus aus... ein Eclipse Plugin möchte ich ungern schreiben.

Gruß

dudeinside
31.10.2007, 14:03
Ich glaube hier handelt es sich um ein grundsätzliches Verständnis Problem. Deshalb für alle noch einmal zum Mitschreiben ;):

Eine id in einem MXML Tag ist KEINE (!!!) Property in der der String der Property gespeichert wird. Die id ist der eindeutige Name der Instanz des Objektes, welches zur Laufzeit auch nicht geändert werden kann. Ein Beispiel das das etwas Verdeutlicht.


//Dieser MXML Tag ist ...
<mx:Button id="bt"/>

// ... in AS3 nichts anderes als das hier
var bt:Button = new Button();
Deshalb kannst du auch nicht deine id-property direkt an id übergeben, wie du es auch richtig erkannt hast. Leider kann ich nicht ganz nachvollziehen was dein Ziel ist, weshlab ich auch keinen genaueren Vorschlag machen kann.

Gruß, Artur

Ghoose
31.10.2007, 15:46
Hallo Artur,
danke für deine Antwort.

Dann verstehe ich aber nicht, wieso in der Klasse UIComponent gerade diese id-property erstellt wird, bzw. man auch die getter/setter überschreiben kann?

Mein Ziel war eigentlich nur, die in der MXML gesetzte ID im FlexBuilder wieder auszugeben (wie man es mit jeder anderen Property machen kann). Beispiel:

<my:Button id="bla" />

Der Button soll nun im Design view, anstatt ein Label anzuzeigen, die id anzeigen. Dies funktioniert im Flex Builder nicht, während der Runtime jedoch geht das. Das Problem ist einfach, dass man diese, per MXML gesetzte ID, nicht abfragen kann.

Hoffe das Beispiel hilft. Danke.

Gruß Thomas

omega psi
31.10.2007, 19:34
Das Attribut id dient nur zur XML Verarbeitung und Referenzierung innerhlab des Dokumentes, sonst braucht man es nicht.