Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-02-2012, 16:05   #1 (permalink)
ING
whatever
 
Registriert seit: May 2008
Beiträge: 419
Dynamischer Konstruktor mit dynamischen Parametern

weiß jemand ob ich bei folgendem konstrukt...

ActionScript:
  1. var name:String = "flash.text.TextFormat";
  2. var type:Class  = Class(getDefinitionByName(name));
  3. var content:*   = new type();
...dem konstruktor auch ein array als parameter mit übergeben kann? also sowas wie apply, mit dem konstruktor scheint apply offensichtlich nicht zu funktionieren.

es gibt zwar eine constructor eigenschaft welche man angeblich in eine Function casten könnte aber diese eigenschaft scheint nur in objektinstanzen zu existieren, zumindestens hab ich so keinen weg gefunden da ran zu kommen. prototype ist da aber das hilft hier nicht weiter.
ING ist offline   Mit Zitat antworten
Alt 04-02-2012, 17:24   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
erkläre einmal ausführlicher, was du da vor hast.

natürlich kannst du einem konstruktor auch ein array übergeben.
arrays können halt alles mögliche beinhalten, was der compiler nicht überprüfen kann.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 04-02-2012, 18:14   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Eine wüste Konstruktion hast Du Dir da ausgedacht

Ich hab' gerade mal etwas rumgespielt und glaube nicht, dass es in AS3 eine syntaktische Möglichkeit gibt, eine Klasse mit einer dynamischen Parameter-Liste in einem Array zu instanziieren. Eine Klasse ist eben keine Funktion und der Konstruktor nicht die Klasse. call und apply sind daher keine Methoden der Klasse Class.

Mich würde aber auch interessieren, was Du genau vor hast?! Das sieht nach so einer Art Universal-Factory aus?!
__________________
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!
Martin Kraft ist offline   Mit Zitat antworten
Alt 05-02-2012, 13:20   #4 (permalink)
ING
whatever
 
Registriert seit: May 2008
Beiträge: 419
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Mich würde aber auch interessieren, was Du genau vor hast?! Das sieht nach so einer Art Universal-Factory aus?!
joar, ka wie man sowas nennt, aber aus sowas...

Code:
<content>
	<library>
		<external.Image name="logo" url="logo.png" />
		<flash.text.TextFormat name="schrift1" size="20" color="0xFF0000" />
		<flash.text.TextFormat name="schrift2" size="25" color="0x0000FF" />
	</library>
	<layout>
		<flash.display.Bitmap name="image1" bitmapData="#logo" /> 
		<flash.text.TextField name="text1" defaultTextFormat="#schrift1" x="100" y="10" width="400" text="Dieses Textfeld ist + this.width + Pixel breit."/>
		<flash.text.TextField name="text2" defaultTextFormat="#schrift2" x="100" y="50" text="Mein Papa heißt + parent.name + ."/>
	</layout>
</content>
wird sowas...



funktioniert auch alles, es gibt halt nur die einschränkung das ich keine objekte erzeugen kann die parameter im konstruktor benötigen.

zur not kann ich ich auch miesen code dafür schreiben...

ActionScript:
  1. if (args.length == 1) content:* = new type(args[0]);
  2. if (args.length == 2) content:* = new type(args[0], args[1]);
  3. if (args.length == 3) content:* = new type(args[0], args[1], args[2]);
  4. // ...
  5.  

aber ne "schöne" lösung wär halt schöner
.
Angehängte Grafiken
Dateityp: gif Clipboard01.gif (11,4 KB, 41x aufgerufen)
ING ist offline   Mit Zitat antworten
Alt 05-02-2012, 15:18   #5 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
gefällt mit garnicht, der Ansatz. wieso muss deine Konfiguration/dein Backend AS3 können?
Und kannst du immer sicherstellen, dass die Parameterreihenfolge für den Constructor eingehalten wird?

imo solltest du das ganze abstrahieren, und da einen Parser+Factory dazwischen bauen.
Das ist zwar am Anfang etwas Aufwand, aber zuverlässig, stabil, und zukunftssicher, und auch Flexibler (du kannst dir Hilfskonstrukte bauen, die in AS so nicht existieren)
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 05-02-2012, 16:04   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von thomas_E Beitrag anzeigen
gefällt mit garnicht, der Ansatz. wieso muss deine Konfiguration/dein Backend AS3 können?
Da kann ich Thomas nur beipflichten: Eine solche Konstruktion ist doch wahnsinnig fehleranfällig und zudem nahezu beliebig manipulierbar.

Du schaffst hier einen haufen Abhängigkeiten wo keine sein sollten. Üblicherweise sollte man ein Backend ja so aufbauen, dass es eine definierte Schnittstelle fürs Frontend bereitstellt und im darüberhinaus völlig egal ist, wie dieses Frontend aussieht und funktioniert. Ob dieses Frontend nun in Flash, JavaScript oder gar Java programmiert ist, sollte für das Backend im Idealfall völlig irrelevant sein ...

Deine Konstruktion sorgt aber für das genaue Gegenteil. Hier muss das Backend die komplette interne Struktur der FlashAnwendung kennen, ohne auf so hilfreiche Techniken, wie Typiserung, Casten oder Fehlerhandling zurückgreifen zu können...
__________________
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!
Martin Kraft ist offline   Mit Zitat antworten
Alt 05-02-2012, 23:55   #7 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Naja - es hängt ja schon davon ab, was er genau vor hat, und wofür es letztendlich konkret genutzt werden soll.
Außerdem:
Zitat:
"Spielen ist die höchste Form des Lernens" A.Einstein
@ING:
Ich hatte mal ein ähnliches Problem hab das mal vereinfacht - die XML-Verarbeitung läßt sicher zu wünschen übrig - aber geht ja nur ums Prinzip.
Dabei werden die Werte nicht dem Konstrukter übergeben sondern den Settern der Instanz.
was hältst Du davon:
PHP-Code:
function parseXML(xml:XMLListaddToDisplayList:Boolean=false){
    for 
each(var item:XML in xml)
    {
        for 
each(var elem:XML in item.elements())
        {
            
            var 
nameStr:String elem.localName();
            var 
type:Class  = Class(getDefinitionByName(nameStr));
            var 
content:*   = new type(); 
            
            if (
addToDisplayListaddChild(content);
                
                for 
each(var attr in elem.attributes())
                {
                    try
                    { 
                        
content[attr.name().toString()] = attr;
                    } 
                    catch (
e:Error)
                    {
                        
trace("Ignorierte, nicht gesetzte Eigenschaft | "+e);
                    }
                }
        }
     }
}
parseXML(xmlFile.library);
parseXML(xmlFile.layout,true); 
Den Fall, daß in der xml Eigenschaften stehen, die die Instanz nicht aufweist, kann man im catch Block behandeln.
Wofür auch immer Du es brauchst: so kannst Du beliebig viele Eigenschaften der Klasseninstanz als Attribute in die XML schreiben.
Oder hab ich was falsch verstanden?

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist gerade online   Mit Zitat antworten
Alt 06-02-2012, 07:19   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von andrelehnert Beitrag anzeigen
Den Fall, daß in der xml Eigenschaften stehen, die die Instanz nicht aufweist, kann man im catch Block behandeln.
»Nicht aufweist« oder »einen anderen Typ« erwartet. Und da der überwiegende Teil der in der API vorhanden Eigenschaften die auf Number, int oder Boolean typisiert ist, XML und dieser Code aber immer nur Strings zurücklieferen, dürfte das (zumindest im StrictMode) meistens mit einem Fehler enden...

...sowas liese sich natürlich durch wildes TypeCasten und ErrorHandling eindämmen, aber spätestens bei, in andern Typen verschachtelten, Eigenschaften (wie z.B. in TextFormat oder Transform/ColorTransform) kommt man auch damit nicht mehr wirklich weit...
__________________
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!
Martin Kraft ist offline   Mit Zitat antworten
Alt 06-02-2012, 07:38   #9 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Naja, das ganze ist nun nicht mehr so weit weg von I.o.C. ... wieso nicht einen vorhandenen Container (Spring ActionScript, Robotlegs) nutzen und View das Protokoll splitten? So könnte man ein Frontend agnostisches Backend bauen und das Flash Frontend trotzdem nach belieben zusammen stöpseln.
Omega Psi ist offline   Mit Zitat antworten
Alt 06-02-2012, 17:15   #10 (permalink)
ING
whatever
 
Registriert seit: May 2008
Beiträge: 419
also ich entwickle das nicht für irgendeinen kunden oder irgendwelche dau's, es ist ein experiment wie andre gut erkannt hat ohne mir gleich konzeptionelle unzurechnungsfähigkeit zu unterstellen

klar ist das fehleranfällig und manipulierbar aber das sind experimente nunmal es ist der (bewusste) versuch die frontend programmierung gleich mit aufs backend abzuwälzen, das sich das backend damit auf as3 beschränkt ist klar und nehme ich gerne in kauf.

Zitat:
Zitat von Martin Kraft Beitrag anzeigen
»Nicht aufweist« oder »einen anderen Typ« erwartet. Und da der überwiegende Teil der in der API vorhanden Eigenschaften die auf Number, int oder Boolean typisiert ist, XML und dieser Code aber immer nur Strings zurücklieferen, dürfte das (zumindest im StrictMode) meistens mit einem Fehler enden...
das funktioniert, zu meinem eigenen verwundern, echt gut. zumindestens zwischen Number und String muss man garnichts casten, das macht as von selbst beim zuweisen. Boolean's kann man auch mit 0 und 1 setzen. komplexe objekte muss man in der library anlegen.

Zitat:
Zitat von Martin Kraft Beitrag anzeigen
...sowas liese sich natürlich durch wildes TypeCasten und ErrorHandling eindämmen, aber spätestens bei, in andern Typen verschachtelten, Eigenschaften (wie z.B. in TextFormat oder Transform/ColorTransform) kommt man auch damit nicht mehr wirklich weit...
versteh ich nicht ganz was du meinst, ich kann sowohl TextFormat als auch ColorTransform objekte in der library erstellen und nutzen. der zugriff ist kein problem weil ich die punktsyntax unterstütze...

Code:
<content>
	<library>
		<flash.geom.ColorTransform name="color1" redMultiplier="0.5" />
		<external.Image name="logo" url="logo.png" />
	</library>
	<layout>
		<flash.display.Bitmap name="image1" bitmapData="#logo" transform.colorTransform="#color1" /> 
	</layout>
</content>
klar setzt das vorraus das der nutzer gute kenntnisse in as3 hat aber ich denke die hab ich und weil ich das nicht beruflich entwickle muss ich nichts dau sicher machen von daher sind begriffe die "fehleranfällig" und "manipulierbar" ohne große bedeutung für mich. in meinen augen ein segen
ING ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] dynamischer text im dynamischen mc andrelehnert Flash Einsteiger 9 16-09-2009 09:48
[Flash CS4] Klasse mit Konstruktor-Parametern einem Array hinzufügen Bambi0815 Flash Einsteiger 8 14-07-2009 00:45
Dynamische Methodennamen mit dynamischen Parametern?! leon77 ActionScript 2 11 14-11-2007 17:01
Konstruktor mit unbekannter Anzahl an Parametern? frankiee ActionScript 2 7 15-03-2006 14:54
übergabe von parametern an den konstruktor einer oberklasse malte_b Softwarearchitektur und Entwurfsmuster 6 20-03-2004 18:34


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele