Wert von einer Klasse abfragen

ksk

Erfahrenes Mitglied
Hallo allerseits!

Ich habe folgendes Problem, womit ihr mir hoffentlich helfen könnt.

Auf der Bühne befinden sich 5 Eingabefelder (r1 bis r5), welche ich einer Klasse übergebe und dieser auch brav ausgeführt wird. Zumindest beim Debuggen.
Anschliesend möchte ich in der Klasse mit diesen Werten aber auch mit Werten welche an die Klasse übergeben wird berechnungen durchführen.

Leider bekomme ich die Werte von der Klasse nicht in andere Eingabefelder.

Code:
on(release){
	var zahlen:cUri;
	zahlen = new cUri(r1,r2,r3,r4,r5);
	
	r4undr5.text = zahlen .RgesR4UndR5();
	r1bisr3.text = zahlen .RgesR1UndR2UndR3();
        ...
        ...
}
r4undr5 und r1bisr3 sind die Eingafelder in der die Werte angezeigt werden sollten.

Hier noch die Funtion in der Klasse
Code:
public function RgesR4UndR5():Number {
		var ohm:Number;
		if(getR4==getR5){
			ohm = getR4 / 2;
			return ohm;
		}else {
			ohm = (1/getR4) + (1/getR5);
			return (1 / ohm);
		}
}

Wäre für jede Hilfe sehr dankbar
 
Zuletzt bearbeitet:
Hi,

hast Du die üblichen Verdächtigen überprüft?
  • Wird der Konstruktor der Klasse "cUri" korrekt aufgerufen? Ist "zahlen" eine gültige Referenz?

  • lassen sich die Textfelder (z.B. "r4undr5") von dort aus referenzieren? Was passiert, wenn Du ihnen statt dessen einen hartkodierten Wert zuweist? Was gibt ein Trace der Textfeldinstanzen und ihrer .text-Eigenschaft zurück?

  • gibt die Funktion RgesR4UndR5 etwas sinvolles (und nicht etwa "undefined" oder "NaN") zurück?

  • Ist das Leerzeichen an dieser Stelle (rot markiert) wirklich Absicht?
Code:
zahlen_.RgesR4UndR5();
  • Hast Du es mal mit einem Casting probiert:
Code:
RgesR4UndR5().toString();

Gruß
.
 
Hallo Datic!

Die Funktion gibt NaN zurück.

Die Variable zahlen wird nur in der on(Release) Methode verwenden und die Referenz zeigt auch nur hier auf die Klasse. Die Klasse wird ordnungsgemäß aufgerufen.

lassen sich die Textfelder (z.B. "r4undr5") von dort aus referenzieren?
Meinst du von der Klasse aus? Wenn ja, dann kann ich nur in sofern nein sagen, da ich die Variablen in der Klasse und die InstanceNamen gleich benamst. Und ich hatte schon von der Funktion aus probiert mit der text-Eigenschaft die TextFelder anzusprechen, aber bekam die Meldung das keine text-Eigenschaft vorhanden ist.


Hardcodiert, wenn ich von der Funktion aus statt der Variable (ohm) einen wert zurückgebe, dann funktioniert es.


Das mit dem (roten) Abstand ist nicht mit absicht. Ist mir beim ändern vom Beitrag passiert. Und das mit Casting funkt auch nicht. Bekomme NaN

Danke
 
Wenn Du NaN bekommst, liegt der Fehler in der Funktion RgesR4UndR5. Wahrscheinlich ist eine der Variablen getR4 oder getR5 nicht definiert bzw. sie enthalten etwas anderes als einen numerischen Wert (z.B. einen String).

Ich kann dein Projekt nicht für Dich debuggen, da ich die Dateien nicht vorliegen habe, also wi wärs. wenn Du alles zusammen einmal postest?

Gruß
.
 
Hy!

Muss man die Werte welche man an den Konstruktor übergibt, auch noch an die setR4-Property übergeben damit man den Wert von der getR4-Property Abfragen kann?
Anbei die Datei
 

Anhänge

Hi,

Deiner Klasse hat gesagt.:
var r1,r2,r3,r4,r5:Number;
Du definierst die Variablen "r1" bis "r4" als Zahlen (Typ "Number") ...

Deiner .fla hat gesagt.:
zahlen = new cUri(r1,r2,r3,r4,r5);
... übergibst dem Konstruktur aber Textfeld-Referenzen.

Auf den Inhalt eines Textfeld greift man aber über seine .text-Eigenschaft zu, so dass Du dem Konstruktor eigentlich die Inhalte der Textfelder übergeben müsstest:
Code:
zahlen = new cUri(r1.text,r2.text,r3.text,r4.text,r5.text);
Typsicher wäre es zudem, die Werte (Textfeldinhalte sind ja zunächst einmal vom Typ String) zuerst in den Typ Number zu casten:
Code:
zahlen = new cUri(parseInt(r1.text, 10), parseInt(r2.text, 10), parseInt(r3.text, 10), parseInt(r4.text, 10), parseInt(r5.text, 10));
- schließlich erwartet Dein Konstruktur ja Werte dieses Typs. ;) (ok, in diesem Falle castet der AS-Parser automatisch von String nach Number, sauberer wäre es allerdings so)

Gruß
.
 
Hy!

Ich habe es auch schon mit .text-Eigenschaft probiert, allerdings ohne Casten. Und bekam daher auch NaN zurück.
Aber jetzt mit dem Casten hauts hin. Danke dir vorerst.


Gruß
 
Wozu ist der Zahl 10?
Wie Dir ein Blick in die Doku verraten hätte, handelt es sich um die Basis des Zahlensystems (16 würde z.B. einen Hexadezimalen Wert parsen). ;)

Und wie kann man die Anzahl der Dezimalstellen ändern
Fließkommazahlen erhältst Du mit parseFloat, zum Runden auf beliebige Stellen empfehle ich einen Blick in unsere Flash-FAQ: Dort findest Du einen entsprechenden Prototype von Matthias Kannengiesser.

Gruß
.
 
Zurück