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 :

IndexedDB*: séparation du code db/balises HTML


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 22
    Par défaut IndexedDB*: séparation du code db/balises HTML
    Bonjour,

    Je m’initie à IndexedDB :
    Mozilla Firefox 68.2.0esr

    J’aimerais séparer le code d’affichage du résultat d’une requête sur la db (ex : fonctions insérant des balises HTML avec la valeur du résultat d’une requête) et le code gérant ’accès à la base de données, de préférence dans des fichiers.js séparés.

    Mais je ne parviens pas à écrire un code propre et structuré accédant à la db et retournant un tableau contenant le résultat.

    Comme le code de la requête est toujours dans une fonction anonyme déclenché par l’évènement ".onsuccess", elle ne peut rien retourner.

    En sortie de la fonction anonyme déclenchée par ".onsuccess", le tableau est vide, voici le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     function recupererToutesLesNotes(db) {
      var tablDeNotes = [];
      let dbReq = getObjRequ(db);
      dbReq.onsuccess = function(event) {
        let curseur = event.target.result;
        if (curseur != null) {
          tablDeNotes.push(curseur.value);
          console.log("Note récupérée : " + curseur.value.text);
          curseur.continue();
        } else {
          console.log("TablDeNotes dans onsuccess: " + tablDeNotes.length);
          // Si pas de meilleur solution, appeler ici la fct d’affichage… 
        }
      };
      dbReq.onerror = function(event) {
        console.log("Erreur dans la fct  " + event.target.errorCode);
      };
      // Ici je voudrais retourner tablDeNotes, mais il est vide
      console.log("TablDeNotes hors onsuccess: " + tablDeNotes.length);
    }
    Voici les log :
    C'est connecté testArray.js:21:11
    TablDeNotes hors onsuccess: 0 testArray.js:49:11
    Note récupérée : note 1 testArray.js:39:15
    Note récupérée : Une note testArray.js:39:15
    TablDeNotes dans onsuccess: 2 testArray.js:42:15
    Je suppose que la solution tutorielle présentée sur MDN est à des fins pédagogiques et n’est pas destinée à être utilisée tel quel, vu qu’elle mélange le code d’itération sur le curseur de la db et le code manipulant la page HTML (ce que je cherche à éviter).

    Une autre solution trouvée sur le net, serait d’appeler la fonction d’affichage (manipulant les balise html de la page web) dans la fct anonyme (Ligne 12 du premier code) et lui passer le tableau de résultat…

    Mais il y a encore une imbrication ne permettant pas une nette séparation (HTML/fonction de la db).

    Appel de la fct recupererToutesLesNotes(db):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Déclaration des variables
    let db;
    let dbDelete = false;
     
    // Création de 'maBaseDeDonnes'
    let dbRequest = indexedDB.open("maBaseDeDonnees");
     
    dbRequest.onsuccess = function(event) {
      db = event.target.result;
      console.log("C'est connecté");
      recupererToutesLesNotes(db);
    };
    Merci d'avance pour votre aide.
    --
    Benoit

    Ps.
    Si la formulation de ma question repose sur compréhension erronée du JavaScript, merci d’avance de m’éclairer.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    En sortie de la fonction anonyme déclenchée par ".onsuccess", le tableau est vide, voici le
    la fonction mise sur le onsuccess est asynchrone, donc le résultat n'est pas encore disponible quand tu fais un console.log.

    Une autre solution trouvée (...) et lui passer le tableau de résultat…
    c'est effectivement ce qui ce fait, on appelle cela « une fonction callback ».

Discussions similaires

  1. [2.x] [TWIG] Symfony m'entoure tout le code d'une balise <HTML> !
    Par Le Barde dans le forum Symfony
    Réponses: 3
    Dernier message: 25/08/2011, 13h32
  2. inserer code js dans balise html
    Par mimilemoose dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/11/2009, 13h04
  3. balise html et code-behind
    Par hugo7 dans le forum ASP.NET
    Réponses: 17
    Dernier message: 16/08/2009, 20h30
  4. Prob de séparation du code html et javascript
    Par tsyfar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/08/2005, 10h09

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