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

JavaScript Discussion :

Insérer des objets dans des objets


Sujet :

JavaScript

  1. #1
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut Insérer des objets dans des objets
    Peut-on stocker des objets dans des objets?

    1/ idée générale
    je désire réaliser des objets "Leçons" qui contiennent différents champs :
    une chaine "classe, une chaine "matière, une chaine "titre", un objet tableau "tb" et une chaine "vignette".
    Les éléments dans le tableau sont des "Docu", suite de documents qui sont des éléments partiels d'une leçon.

    Le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //-------------- un document, morceau de leçon  ------------------
          export let Docu = class Docu {
             constructor (nom, lien) {
                this.nom = nom;
                this.lien = lien;
             }
          }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    / ------------  une lecon, peut contenir plusieurs documents  ------------------
          export let Lecon = class Lecon {
             constructor (classe, matière, titre, tb, vignette) {
                this.classe = classe;
                this.matière = matière;
                this.titre = titre;
                this.tb = tb;
                this.vignette = vignette; 
             }
          }
          //=======================================================================
    J'ai réalisé une structure de leçon pour faire des tests.
    Cela ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      // leçons de 2NTE techno
     
          var classe = "2NTE";
          var matière = "TECHNOLOGIE";
     
          export let tb_docu = [];
          tb_docu[0] = new Docu ("fiche élève", "2nte/techno/symboles.pdf");
          tb_docu[1] = new Docu ("Fiche du prof", "2nte/techno/symboles.pdf");
          tb_docu[2] = new Docu ("correction", "2nte/techno/symboles.pdf");
     
          export let table_0 = [];
          table_0[0] = new Lecon (`${classe}`, `${matière}`, "Les Symboles de Base",  `${tb_docu}` , "2nte/techno/vignette_lc0symb.png");


    2/ la mise en oeuvre
    pendant les tests, tout fonctionne bien pour les champs simples : (exemple avec le champ "matière")
    (l'élément res.table[monBloc] représente la table "table_0" et monIndex est à zéro pour le test)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     document1.textContent = `${res.table_source[monBloc][monIndex].matière}`;
                                    console.log(" table : " + monBloc + " index : " + monIndex + "  matière : " +  res.table_source[monBloc][monIndex].matière);
    3/ la problématique
    je ne parviens pas à accéder correctement à mon champ composé, c'est à dire, le champ "tb", qui est lui-même un objet composé de deux champs.
    J'ai tenté plusieurs syntaxe, qui me paraissaient logiques, comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document1.textContent = `${res.table_source[monBloc][monIndex].tb[0].nom}`;
    Cela ne fonctionne pas et m'indique de l'élément est indéfini.


    Questions :

    Q1 : le principe d'avoir dans un objet, un propriété qui est elle même un objet est-il correct?
    Si oui, comment accéder aux champs de cet objet secondaire, qui est lui même un composante de l'objet principal?

    Q2 : si dans le principe cela ne peut pas fonctionner, comment puis-je procéder pour éviter cette problématique?

    Merci pour vos pistes éventuelles....

  2. #2
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 321
    Points : 642
    Points
    642
    Par défaut
    Bonjour,

    Il ne faut pas convertir ton tableau en chaine lorsque tu instancies une nouvel objet Lecon, tu peux directement passer ton tableau en paramètre du constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table_0[0] = new Lecon(`${classe}`, `${matière}`, "Les Symboles de Base", tb_docu, "2nte/techno/vignette_lc0symb.png");

  3. #3
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut merci Pytet!
    Bonjour Pytet,

    ta solution marche nickel! Je n'arrivais pas à trouver la bonne syntaxe et je tournais en rond.
    Tu m'as fais gagner beaucoup de temps.
    Merci beaucoup!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment insérer des objets dans le gui
    Par roza19 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 04/12/2015, 17h24
  2. [ArrayList] Comment insérer des objet dans ArrayList
    Par jean1979 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/10/2011, 11h42
  3. Réponses: 4
    Dernier message: 23/01/2008, 08h57
  4. Réponses: 0
    Dernier message: 18/01/2008, 12h05
  5. Réponses: 3
    Dernier message: 16/10/2006, 11h06

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