IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Paramètres de constructeur et MXML


Sujet :

Flex

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut Paramètres de constructeur et MXML
    Bonjour,

    je ne comprends pas un truc, j'essaye de créer un composant dérivé de l'objet ComboBox, le but étant d'afficher les années à partir d'une année de départ et le nombre souhaité, par exemple si je pars de l'année 2000 avec nombre souhaité = 2 j'aurais dans mon ComboBox les valeurs suivantes :

    - 2000
    - 2001
    - 2002

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class ComboBoxYear extends ComboBox
    {
       public var _Year_begin:uint;
       public var _Num_year:uint;
       private var ListYear:ArrayCollection;
     
       // Constructor
       public function ComboBoxYear(Year:uint,numy:uint)
      {
         ...
      }
     
    }
    Application mxml utilisant ce composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    				xmlns:custom="components.*"
    				width="632"
    				height="715"
    				xmlns:local="*"
    				xmlns:comp="components.*"
    <comp:ComboBoxYear _Year_begin="2000" _Num_year="5"/>
     
    </mx:Application>
    Voilà pour le code, ça compile, pourtant à l'exécution j'ai l'erreur suivante Argument error #1063:Non-correspondance du nombre d'arguments sur components::ComboBoxYear(). 2 prévu(s), 0 détecté(s).

    Ok je comprends l'erreur mais comment passer des paramètres à mon constructeur ? J'ai fouillé sur le Net et apparemment une application mxml ne peut pas passer de paramètre à un constructeur, mais dans ce cas comment faire ? J'ai tenté avec un constructeur sans paramètre, juste en utilisant les variables publiques, mais le problème c'est en débogage dans le constructeur ces variables arrivent vides. Je coince.

    Merci pour votre aide

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Bonjour,

    Alors j'ai plusieurs remarques à te faire.

    1- Tu veux faire une série de combo box mais tu utilises une classe qui ne peut construire qu'un seul combo box. Il te faudrait choisir une autre classe pouvant générer plusieurs combo box comme un ListBase (il y a peut être mieux dans la documentation) par exemple qui te fournit la méthode addChild pour rajouter tes combo box.

    2 - Pour le constructeur tu as raison, il te faudrait des getter et setter sur tes propriétés.

    3 - Evite les _ pour les noms d'attributs public. Je te conseille de les mettre en privé puis de décrire les getter et setter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public var _numYear:uint;
     
    public function get numYear():uint{
                return _numYear
    ;
            }
     
            public function set numYear(value:uint):void{
                _numYear = value;
            }
    Puis d'utiliser dans ton MXML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <comp:ComboBoxYear yearBegin="2000" numYear="5"/>
    Ton constructeur sera vide mais les données seront complétées au moment du set.

    ++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    mais le problème c'est en débogage dans le constructeur ces variables arrivent vides.
    ??? Dans le constructeur de quoi ? Si c'est dans le constructeur de ComboBoxYear c'est bien normal !!! Comment les variables d'instances pourraient être initialisées AVANT que l'instance soit créée ???


    Flûte je me suis fait doubler par ellene ! Un dimanche en plus !!!

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Mais à vous deux, ok pour vos remarques, en revanche ellene pourquoi tu dis que je veux faire une série de combo box ?

    Mais à quelle moment je dois remplir ma variable ListYear (ArrayCollection) ?

    Merci pour votre aide.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Mais à quelle moment je dois remplir ma variable ListYear (ArrayCollection) ?
    Lorsque les paramètres qui influencent sa composition sont modifiés. Donc dans le settter des propriétés.

    En faisant ainsi l'inconvénient est que le ArrayCollection est calculé plus de fois que nécessaire. Idéalement il faut faire cette mise à jour dans le commitProperties.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Citation Envoyé par tafkap Voir le message
    Mais à vous deux, ok pour vos remarques, en revanche ellene pourquoi tu dis que je veux faire une série de combo box ?
    Je n'ai peut être pas bien compris ton besoin.
    J'ai cru comprendre que tu voulais afficher une combo box par année. Ou alors c'est uniquement le label qui contient ces valeurs ? Si c'est le deuxième alors tu peux oublier ce que je t'ai dit sur les listes

    ++

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Dans un seul ComboBox je souhaite sélectionner une année, ma question est relative à l'initialisation des années à fournir à l'utilisateur.

  8. #8
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par tafkap Voir le message
    Dans un seul ComboBox je souhaite sélectionner une année, ma question est relative à l'initialisation des années à fournir à l'utilisateur.
    Bonjour

    Perso, je composerais différement avec HTTPService.
    Disons que ce n'est qu'une autre alternative, si tant est qu'elle soit appropriée (php dispo).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <mx:HTTPService id="listeAnnee" url="script.php" method="POST">
         <mx:request xmlns="">
         <madate>{madate.text}</madate> //envoi de la variable année à traiter
         </mx:request>
         </mx:HTTPService>
    script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    print"<etat>\n";
    $suite = ($madate + 4);
    for ($madate; $madate <= $suite; $madate++) {
    print"<liste><madate>$madate</madate></liste>\n";
    }
    print"</etat>";
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:ComboBox dataProvider="{listeAnnee.lastResult.etat.liste}" labelField="madate" ...........

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    ouahou ! utiliser un httpservice pour remplir un tableau d'entiers tout bête, c'est osé

    Tu peux m'expliquer l'intérêt (en dehors du côté didactique) ??

  10. #10
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par jylaxx Voir le message
    Tu peux m'expliquer l'intérêt (en dehors du côté didactique) ??
    Simplement, et si j'ai bien compris, parceque l'année de départ est à définir ou variable.
    Par conséquent, un petit algo s'impose, moi je pensais à php pour ce faire.
    Maintenant, en mxml ou AS, c'est pas trop mon truc.
    Mais au final, ma suggestion n'est pas plus lourde, je rappelle, c'est juste une alternative, maintenant, si il y a mieux, à vot' bon coeur.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    ma suggestion n'est pas plus lourde
    c'est très subjectif !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Bindable]
    var dp : Array = null ;
     
    private function initDP( from : int, count : int ) : void
    {
      dp = new Array( count ) ;
      while ( count > 0 )
      {
        dp.push( {label:from} ) ;
        from++ ;
        count-- ;
      }
    }

  12. #12
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Citation Envoyé par jylaxx Voir le message
    c'est très subjectif !!
    Heu....Ca ne l'était pas avant ta dernière suggestion.
    La mienne était pour combler le defaut.
    Aprés tout, c'est vous les pros de l'AS.

  13. #13
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    En bref.....

    Citation Envoyé par tafkap Voir le message
    ... le but étant d'afficher les années à partir d'une année de départ et le nombre souhaité...
    Citation Envoyé par jylaxx Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Bindable]
    var dp : Array = null ;
     
    private function initDP( from : int, count : int ) : void
    {
      dp = new Array( count ) ;
      while ( count > 0 )
      {
        dp.push( {label:from} ) ;
        from++ ;
        count-- ;
      }
    }
    Pourquoi "while"
    tafkap sait combien de dates (nombre souhaité) doivent s'afficher dans son combo (2,4,6...etc).

    Dans ces considérations, applique un code fonctionnel...ou plus concrétement avec comme exemple dp=2000.
    Et compléte avec une suite suivant 2000 (+1 +3, +6), ce sera peut-être plus compréhensible pour lui.

    Je l'ai fait avec ma petite méthode, fais de même avec la tienne.

    Ensuite, à lui de choisir ce qui lui convient le mieux.
    Didactique,...ou évasive.
    On fait ce qu'on peut avec ses compétences, l'intérêt n'est pas d'imposer, mais de partager et de donner des idées.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Pourquoi "while"
    Pourquoi pas ? C'est pas moins lisible qu'un for !!

    tafkap sait combien de dates (nombre souhaité) doivent s'afficher dans son combo (2,4,6...etc).
    Le nombre de valeurs à afficher fait partie de ses variables ! cf. _Num_year

    Ensuite, à lui de choisir ce qui lui convient le mieux.
    Didactique,...ou évasive.
    On fait ce qu'on peut avec ses compétences, l'intérêt n'est pas d'imposer, mais de partager et de donner des idées.
    En fait je ne répondais pas à tafkap mais à toi à l'occurrence !
    Le problème de tafkap n'est pas de savoir COMMENT remplir son dataprovider mais QUAND.
    Et je n'impose rien du tout. J'ai juste trouvé l'idée d'utiliser un HTTPService pour initialiser un tableau avec 3 valeurs à partir de variables locales un peu exagéré, surtout en précisant que ce n'était pas plus lourd.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/05/2010, 15h00
  2. Réponses: 1
    Dernier message: 21/12/2009, 19h03
  3. info sur les paramètres de constructeur
    Par guiyomh dans le forum C++
    Réponses: 5
    Dernier message: 24/06/2008, 20h38
  4. 2d paramètre du constructeur de wxFrame
    Par Mersenne dans le forum wxWidgets
    Réponses: 5
    Dernier message: 04/06/2007, 18h55
  5. [AS2] passer paramètre à un constructeur par attachMovie()
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 06/08/2005, 03h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo