| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jan 2012
Beiträge: 29
| Dictionary mit Typen funktioniert nicht immer
Hallo, In meiner Flash-Anwendung habe ich mehrmals das Szenario dass ich verschiedene Arten von Objekten an der GUI anzeigen möchte. Diese Objekte haben die gleiche Basisklasse. Außerdem wird jedes Objekt mit einem eigenen DataRenderer angezeigt. Damit für jedes Objekt auch der richtige Renderer ausgewählt wird benutze ich ein Dictionary um die Typzuordnung richtig zu regeln. Das sieht dann so aus: Code: Code: var dict:Dictionary = new Dictionary(); dict[ItemsLayer] = new ClassFactory(ItemsLayerRenderer); dict[BackgroundLayer] = new ClassFactory(BackgroundLayerRenderer); dict[ClippingInfoLayer] = new ClassFactory(ClippingInfoLayerRenderer); dict[ProductLayer] = new ClassFactory(ProductLayerRenderer); dict[BorderLayer] = new ClassFactory(BorderLayerRenderer); Code: Code: private function getFactory():ClassFactory
{
if(data == null) return null;
for(var type:* in _dictionary)
{
if(data is Class(type))
return ClassFactory(_dictionary[type]);
}
return null;
} Das ganze funktioniert im Prinzip auch. Allerdings kommt es seit kurzem zu einem Problem. Die oben aufgelisteten Klassen für das Dictionary leiten alle von einer Basisklasse Layer ab. Neu hinzugekommen ist die Klasse ClippingInfoLayer, welche als einzige nicht direkt von Layer, sondern von ProductLayer ableitet. Damit die getFactory()-Methode dieser Klasse auch wirklich den ClippingInfoLayerRenderer, und nicht den ProductLayerRenderer zuweist habe ich den Eintrag für diese konkretere Klasse absichtlich zuerst ins Dictionary geschrieben. Ich gehe davon aus dass die for-Schleife die Elemente von vorne nach hinten durchläuft. Nun kommt es aber hin und wieder sporadisch einmal vor dass für Elemente dieses Typs trotzdem der Renderer für seine Basisklasse ermittelt wird. Drücke ich im Browser auf Aktualisieren behebt sich dieses Problem manchmal. Ich habe den Eindruck als würde für die Klasse ClippingInfoLayer zufällig entweder der ClippingInfoLayerRenderer oder der ProductLayerRenderer zurückgegeben werden. Es wäre toll wenn mir jemand Tipps geben könnte wie ich dieses Problem umgehen könnte. Wenn jemand bessere Lösungsansätze für mein Problem hat wäre ich daran natürlich auch interessiert. |
| | |
| | #2 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
| Hallo und willkommen im Forum! Arbeite doch mit der contructor-Eigenschaft statt mit is! Diese sollte ja immer auf die konkrete Klasse und nicht auf eine der Superklassen zeigen. P.S.: Wo kommt eigentlich dieses data her?
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Jan 2012
Beiträge: 29
|
Hallo, Danke für die schnelle Antwort. Das Data-Objekt ist eine Instanz eines beliebigen Objekts. Für dieses Objekt soll dann, je nach Typ des Objekts, eine ClassFactory eines entsprechenden Anzeigeobjekts ermittelt werden. Diese Aufgabe übernimmt mein TypeBasedContentController, eine eigene Komponente die ich mir gebastelt habe. Bsp: Ich initiiere meinen TypeBasedContentController mit dem Dictionary aus meinem ersten Post. Anschließend schreibe ich in das Data-Element des Controllers ein Objekt vom Typ BackgroundLayer. Wenn nun die Funktion getFactory() aufgerufen wird sollte eine ClassFactory zurückkommen mit der ich Objekte vom Typ BackgroundLayerRenderer erzeugen kann (so wie im Dictionary angegeben). Das funktioniert wie gesagt auch. Nur wenn eine Klasse von der anderen ableitet wird ab und zu der Renderer der Basisklasse verwendet und nicht der konkretere. Ich habe gerade mal die Typprüfung umgebaut: Code: private function getFactory():ClassFactory
{
if(data == null) return null;
for(var type:* in _dictionary)
{
if(data.constructor == Class(type).prototype.constructor)
return ClassFactory(_dictionary[type]);
}
return null;
} |
| | |
| | #4 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.162
|
Sollte nicht das hier reichen?! ActionScript:
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Dictionary funktioniert nich :S | screeny | ActionScript 3 | 16 | 01-09-2009 14:56 |
| Typen Typen Typen ... konvertieren? | TeeJay | ActionScript 2 | 2 | 07-03-2007 16:47 |
| setIntervall funktioniert nicht immer..? | meruhh | ActionScript 1 | 1 | 08-04-2006 22:19 |
| Rollover funktioniert nicht immer??!! | asyoulikeit | Flash MX | 5 | 15-07-2004 17:20 |
| geturl funktioniert nicht immer!?! | Isa23 | Flash MX | 2 | 16-05-2004 16:37 |