Forums Développement Multimédia

Aller au contenu

Singleton et getDefinitionbyname

CODE Actionscript

3 réponses à ce sujet

#1 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 24 April 2013 - 16:32 PM

Bonjour,

je charge des classes différentes selon un type défini.

var specificClassString : String = "vemd.specific::" + "GestionEvt" + type;
var specificClass : Class = getDefinitionByName(specificClassString) as Class;
new specificClass();
specificClass.getOccurence();

Il accepte l'instanciation d'une nouvelle occurence de specificClass sauf que s'agissant d'un singleton, je ne l'autorise pas.
Et par contre il ne trouve pas la fonction getOccurence sur specificClass

Voici un exemple de specificClass

private static var occurence : GestionEvtEC120;
private static var autoriseOccurence : Boolean = false;
////****
public function GestionEvtEC120() {
if (autoriseOccurence) {
  occurence = this;
  init();
} else {
  trace(className + " : interdit d'instancier via le constructeur !  Utiliser : getOccurence()");
  }
}
// méthodes statiques  publiques
public static function getOccurence() : void {
if (!occurence) {
  autoriseOccurence = true;
  new GestionEvtEC120();
  autoriseOccurence = false;
}
}

merci de votre aide

Modifié par Nataly, 24 April 2013 - 18:12 PM.
balise de code

Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#2 web-dro

    Ceinture Verte

  • Members
  • PipPipPipPip
  • 71 messages

Posté 24 April 2013 - 16:49 PM

Je me réponds à moi-même :

il faut faire ceci :

[code]var specificClassString : String = "vemd.specific::" + "GestionEvt" + type;
getDefinitionByName(specificClassString).getOccurence()[/AS]

C'était plus simple que prévu!
Image IPB
contact@web-dro.com
15 rue des templiers
30210 COLLIAS
portable : +33 (0)6 09 94 14 44
Tél/Fax : +33 (0)4 11 83 77 18

#3 Benzouye

  • Members
  • PipPipPipPipPipPipPipPip
  • 583 messages

Posté 24 April 2013 - 16:58 PM

Bonjour,

Je n'ai rien compris à ton bout de code, par contre tu as éveillé ma curiosité ...
Saurais-tu expliquer le contexte et l'utilité de cette façon de travailler ? en MP éventuellement ...

Merci !
Benzouye
Travaille avec FlashDevelop 4 + Flex SDK 4.6 open source

#4 Galacta

    Etudiant Ingénieur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 689 messages

Posté 24 April 2013 - 18:03 PM

Salut,


var specificClassString : String = "vemd.specific::" + "GestionEvt" + type;
var specificClass : Class = getDefinitionByName(specificClassString) as Class;
new specificClass();
specificClass.getOccurence();
 

specificClass est de type "Class" et si tu regardes la doc, Class n'a pas cette méthode. Class est en fait un wrapper qui englobe la répresentation d'une classe pour le player.

Si tu veux instancier il faut que tu fasses :


var instance : GestionEvtEC120 = new specificClass() as GestionEvtEC120;
 

Edit : " Si c'est un singleton c'est vrai que tu ne peux pas l'instancier directement, malheureusement je vois pas trop comment faire, essaye peut être avec un specificClass["getOccurence"](); ?

@Benzouye : C'est intéressant quand tu charges des données dynamiquement, typiquement un SWF chargé dans un autre, dans lequel tu vas utiliser des classes, mais sens avoir à les importer, tu vas simplement dire au player "Va chercher telle classe" ( Si tu l'as chargée dans le même ApplicationDomain que ton SWF principal ).

C'est aussi intéressant pour faire de la sérialisation d'objet : [Objet type : path.to.my::Class, val] =>

var classe : Class = getDefinitionByName(path.to.my::Class) as Class;
var instance : path.to.my::Class  = new classe();
instance.val = val;
 

Word hard, play hard.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)