Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-10-2006, 10:40   #1 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
inspectable und singleton?

Guten Tag die Herren,

Ich habe ein Problem in zusammenhang mit dem singleton pattern und des inspectable tags!

konkretes bsp ist ein adventkalender an dem sich fenster anmelden sollen aber die designer am adventkalender und an den fenstern paramter einstellen können!

das problem ist aber das er die inspectable tags anscheinend nicht erkennt bzw. glaub ich das es an der compiler-reihenfolge liegt!

hier mal ein schnipsel zur verdeutlichung:

ActionScript:
  1. class xmas.Adventkalender {
  2.    
  3.     private static var _instance:Adventkalender = null;
  4.    
  5.     [Inspectable(name="Alle Fenster Zeigen", type="Boolean", defaultValue=true)]
  6.     public static var showAll:Boolean;
  7.    
  8.     public function Adventkalender()
  9.     {   }
  10.    
  11.     public static function getInstance():Adventkalender
  12.     {
  13.         if(Adventkalender._instance == null) {
  14.             Adventkalender._instance = new Adventkalender();
  15.         }
  16.        
  17.         return Adventkalender._instance;
  18.     }
  19.    
  20.     public function getItem()
  21.     {
  22.         trace(showAll);
  23.     }
  24. }

ActionScript:
  1. import xmas.*;
  2.  
  3. class xmas.Fenster extends MovieClip {
  4.    
  5.     private var a:Adventkalender;
  6.     private var tagTxt:TextField;
  7.    
  8.     [Inspectable(name="Tag", type="Number")]
  9.     public var tag:Number;
  10.    
  11.     public function Fenster()
  12.     {
  13.         //instance of adventkalender
  14.         a = Adventkalender.getInstance();
  15.         a.getItem();
  16.        
  17.         tagTxt = this.tagTxt;
  18.         tagTxt.text = String(tag);
  19.     }
  20.    
  21. }

also wenn ich jetzt aus Fenster.as getItem von Adventkalender.as aufrufe traced der undefined??

das fla häng ich auch noch an!

vieleicht hat jemenad schon mal so ein problem gehabt oder weiß eine andere lösung will das nur nicht wieder mit global lösen!

g und danke mario
Angehängte Dateien
Dateityp: rar xmas.rar (6,5 KB, 5x aufgerufen)
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 10:59   #2 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
wenn showAll static ist (sein muss?), kannst du zwangläufig auch
nicht direkt aus der instanz darauf zugreifen.

gehts denn so?
PHP-Code:
public function getItem()
{

      
trace(Adventkalender.showAll);


michael ist offline   Mit Zitat antworten
Alt 10-10-2006, 11:14   #3 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
sorry das war natürlich unsinn, du kannst ja von instanzen auf statische variablen zugreifen.
ich hatte das mit statischen methoden, die nicht auf instanzvariablen zugreifen können durcheinandergeworfen
michael ist offline   Mit Zitat antworten
Alt 10-10-2006, 12:30   #4 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
hallo

des gibts ja nicht wie kann ich das lösen wenn ich da inspectable parmater verwenden will!

so gehts natürlich tadelos:

ActionScript:
  1. //[Inspectable(name="Mode", type="Boolean", defaultValue=true)]
  2.     public var showAll:Boolean;
  3.    
  4.     public function Adventkalender()
  5.     {
  6.         showAll = true;
  7.     }

bleibt wirklich nur _global?

g mario
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 12:34   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Vielleicht kannst du einen setter/getter draus machen, der intern auf die statische Variable zugreift?

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 10-10-2006, 12:51   #6 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
danke bokel,

für deine antowort hab folgendes versucht aber jetzt steh ich völlig daneben!

im adventkalender.as

ActionScript:
  1. [Inspectable(defaultValue="true")]
  2.     public function set mode(showAll:Boolean)
  3.     {
  4.         this.showAll = showAll;
  5.     }
  6.    
  7.     public function get mode():Boolean
  8.     {
  9.         trace(showAll);
  10.         return showAll;
  11.     }

und im Fenster.as

ActionScript:
  1. public function Fenster()
  2.     {
  3.         //instance of adventkalender
  4.         a = Adventkalender.getInstance();
  5.         trace(a.mode);
  6.        
  7.        }

und da kommt jetzt auf einmal im trace 1.true, 2.undefined, 3. undefined???

das heißt allso das die flash ide die get und set ausführt und auch die var kennt aber Fenster.as nicht?!

bitte komm einfach nicht weiter oder soll ich das vergesen und anders drangehen aber wie?

g mario
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 13:16   #7 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Es ist doch showAll und nicht this.showAll im setter, oder?
mfg. r
bokel ist offline   Mit Zitat antworten
Alt 10-10-2006, 13:20   #8 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
hallo

das mach ich immer damir ich die namen gleich habe macht aber nicht wirklich einen unterschied!

auch ohne this gehts nicht!

und ich hab keine ahnung warum das so sein soll!

g mario
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 13:24   #9 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich dachte showAll ist static, oder ?
mfg.r
bokel ist offline   Mit Zitat antworten
Alt 10-10-2006, 13:25   #10 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ich frage mich allerdings, was passiert, wenn mehrere Fenster in die selbe globale oder static Variable schreiben. Dann gewinnt jeweils der letzte. Ist es das, was du willst?

mfg. r
bokel ist offline   Mit Zitat antworten
Alt 10-10-2006, 13:36   #11 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
aso ja war static da hab ich aber nur alle möglichen varianten versucht!

was ich eigentlich wollte ist das alle fenster vom adventkalender paramter abrufen können - die designer einstellen können!

das problem ist ja das er immer undefined ausgibt sobald ich die variable mit inspectable anlege sobald ich sie normal anlege also im constructor oder so - dann kann das fenster sie ja auch lesen??!

g mario
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 15:23   #12 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
ich weiß jetzt warum er die variable nicht lesen kann - falls das problem wieder mal wer haben sollte!

wenn man die komponenten mit der klasse per bibliothek verbindet (was ja sinn und zweck ist) gehts nicht weil die ide zum instanziern eine andere routine benutzt! also ist der singleton definitiv nichts für komponenten!

aber die frage wie man verschiedene komponenten sauber miteinander kommunizieren lässt und variablen teilt bleibt! das einzige was mir da eingefallen ist:

ActionScript:
  1. //adventkalender.as
  2. /**
  3. * @author mue
  4. */
  5.  
  6. class xmas.Adventkalender {
  7.  
  8.     [Inspectable(name="Alle zeigen", type="Boolean", defaultValue=true)]
  9.     public var showAll:Boolean;
  10.    
  11.     private var windowArr:Array;
  12.    
  13.     public function Adventkalender()
  14.     {   
  15.         //das stoert mich einfach so extrem!! zum kotzen!
  16.         _global.adventkalender = this;
  17.         windowArr = new Array();
  18.     }
  19.    
  20.     public function addWindow(win:MovieClip)
  21.     {
  22.         for(var i:String in windowArr) {
  23.             if(windowArr[i] == win) return;
  24.             else windowArr.push(win);
  25.         }
  26.     }
  27.  
  28. }
  29.  
  30. //fenster.as
  31. /**
  32. * @author mue
  33. */
  34.  
  35. import xmas.*;
  36.  
  37. class xmas.Fenster extends MovieClip {
  38.    
  39.     private var a:Adventkalender;
  40.     private var tagTxt:TextField;
  41.    
  42.     [Inspectable(name="Tag", type="Number", defaultValue=1)]
  43.     public var tag:Number;
  44.    
  45.     public function Fenster()
  46.     {      
  47.         _global.adventkalender.addWindow(this);
  48.     }
  49.    
  50.     private function init()
  51.     {
  52.         tagTxt = this.tagTxt;
  53.         tagTxt.text = String(tag);
  54.     }
  55.    
  56. }

aber schön ist das nicht!

g mario
troner ist offline   Mit Zitat antworten
Alt 10-10-2006, 16:58   #13 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
ich würds vermutlich wie bei den radioButtons machen.

mit übergeordneter class xmas.FensterGroup
michael ist offline   Mit Zitat antworten
Alt 10-10-2006, 20:39   #14 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
So geht es bei mir, aber das ist wohl nicht was du willst, oder?
PHP-Code:
/**
 * @author mue
 */
class xmas.Adventkalender {
    
    private static var 
_instance:Adventkalender null;
    
    private static var 
_showAll Boolean;
    
    [
Inspectable(name="Alle Fenster Zeigen"type="Boolean"defaultValue=true)]
    public function 
set showAll(newValue:Boolean) : Void
    
{
        
_showAll newValue;
    }
    
    public function 
get showAll() : Boolean
    
{
        return 
_showAll;
    }
    
    public static function 
getShowAll(Void) : Boolean
    
{
        return 
_showAll;
    }
    
    public function 
Adventkalender() {
        
trace("Adventkalender#Adventkalender - showAll: " showAll);
    }
    
    public static function 
getInstance():Adventkalender
    
{
        if(
Adventkalender._instance == null) {
            
Adventkalender._instance = new Adventkalender();
        }
        
        return 
Adventkalender._instance;
    }
    
    public function 
getItem()
    {
        
trace(showAll);
    }

__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 11-10-2006, 11:09   #15 (permalink)
pensionist
 
Benutzerbild von troner
 
Registriert seit: Jan 2003
Ort: Thalheim b. Wels
Beiträge: 568
@Janoscharlipp du bist der held - das ist genau das was ich gesucht habe!°!

hab mir aber eingebildet das ich das selbe auch versucht habe!

vielen dank!!!

PS: für was wär das gewesen?
ActionScript:
  1. public static function getShowAll(Void) : Boolean
  2.     {
  3.         return _showAll;
  4.     }

g mario
troner 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele