IDBIndex.openKeyCursor()

Cet article nécessite une relecture technique. Voici comment vous pouvez aider.

Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.

La méthode openKeyCursor() de l'interface IDBIndex fait une requête récursive suivant un curseur qui itère l'index relié sur l'intervalle de clé spécifié.

La méthode la positionne le curseur de façon approprié, suivant la direction spécifié.

  • Si aucun intervalle de clé n'est spécifié ou qu'il est null, tout les enregistrement serons alors inclues.
  • L' événement success est toujours déclenché et:
    • Si un enregistrement est trouvé la propriété result contient le curseur courant.
    • Si aucun enregistrement n'est trouvé la propriété result de la requête vaudras null.

Note : Cette fonctionnalité est disponible via les Web Workers.

Syntaxe

var request = myIndex.openKeyCursor(keyRange,direction);

Paramètres

keyRange Facultatif
L'intervalle de clé sur lequel se déplace le curseur. On peut passer un clé seule qui sera alors considéré comme une intervalle seule. Par défaut le curseur se déplace sur l'ensemble des clés de l'index.
direction Facultatif
La direction du curseur qui défini le sens d'itération. par défaut "next".

Renvoie

Une requête.
La propriété result de cette requête contient le curseur.

Exceptions

TransactionInactiveError
Cette exception est levé si la transaction est inactive.
DataError
Cette exception est levé si la clé ou l'intervalle de clé est invalide.
InvalidStateError
Cette exception est levé si l'index à été supprimé.
TypeError
Cette exception est levé si la valeur de la direction n'est pas valide.

Exemple

Dans l'exemple suivant on ouvre une transaction puis un magasin d'objet et enfin l'index lName.

Finalement, On itère sur tous les enregistrements pour en insérer leur clé dans un tableau HTML. En utilisant la méthode IDBIndex.openKeyCursor qui travaille de la même façon que la méthode IDBObjectStore.openKeyCursor de l'accès au magasin d'objet sauf que les enregistrements sont renvoyés dans l'ordre de l'index et non celui du magasin d'objet.

function displayDataByIndex() {
  tableEntry.innerHTML = '';
  
  //ouvre un transaction
  var transaction = db.transaction(['contactsList'], 'readonly');
  //accés au magasin d'objet
  var objectStore = transaction.objectStore('contactsList');
  
  //on récupère l'index
  var myIndex = objectStore.index('lName'); 

  //un curseur qui itère sur l'index
  var request = myIndex.openCursor();
  request.onsuccess = function(event) {
    var cursor = request.result;
    if(cursor) {

    
      // cursor.key la clé de l'enregistrement à la position du curseur
      // il n'y as pas de cursor.value contrairement à openCursor()

      var tableRow = document.createElement('tr');
      tableRow.innerHTML =   '<td>' + cursor.key + '</td>'
      tableEntry.appendChild(tableRow); 
      
      //on relance la requête pour la position suivante du curseur
      cursor.continue();
    } else {
      console.log('Toutes les clé ont été affichés.');    
    }
  };
};

Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).

Spécification

Spécification Statut Commentaire
Indexed Database API
La définition de 'openKeyCursor()' dans cette spécification.
Recommendation  

Compatibilité avec les navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Support basique 23webkit
24
10 moz
16.0 (16.0)
10, en partie 15 7.1
Disponible dans workers (Oui) 37.0 (37.0) ? (Oui) ?
Fonctionnalité Android Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile
Support basique 4.4 22.0 (22.0) 1.0.1 10 22 8
Disponible dans workers (Oui) 37.0 (37.0) (Oui) ? (Oui) ?

Voir aussi

 

 

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : gadgino
 Dernière mise à jour par : gadgino,