2016-06-07 7 views
0

Ich konvertiere etwas IndexedDB-Code, um YDN-DB zu verwenden und benötige Hilfe bei der Konvertierung. Dieser Code löscht im Wesentlichen die Datenbank, wenn die Seite geladen oder neu geladen wird, aber nicht, wenn sie aktualisiert wird. Wie würde ich das mit YDN-DB erreichen?YDN-DB - Datenbank löschen und neu laden, wenn Seite geladen/neu geladen wird, aber nicht aktualisiert

var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB; 
var db; 
window.refreshing = false; 

$(document).ready(function(){ 
    if(window.performance) { 
     if(performance.navigation.type == 0) { 
      // The db already exists so delete it and re-create it so we don't have stale records. 
      deleteDB(); 
     } else { 
      window.refreshing = true; 
      open(); 
     } 
    } 
}); 

function deleteDB() { 
    var request = indexedDB.deleteDatabase("DocsDB"); 
    request.onsuccess = function() { 
     open(); 
    } 
    request.onerror = function(event) { 
     throw "Error in deleteDB."; 
    } 
} 

function open() { 
    var request = indexedDB.open("DocsDB"); 
    var upgraded = false; 
    request.onupgradeneeded = function(evt) { 
     upgraded = true; 
     var dbnew = evt.target.result; 

     dbnew.onerror = function(event) { 
      console.log("IndexedDB error: " + evt.target.error.code); 
     }; 

     var objectStore = dbnew.createObjectStore(
       "docs", { keyPath: "id", autoIncrement: true }); 

     objectStore.createIndex("docname", "DOC_NAME", { unique: false }); 
     objectStore.createIndex("printdate", "PRINT_DATE", { unique: false }); 
    } 
    request.onsuccess = function(evt) { 
     db = request.result; 
     if (!upgraded && !window.refreshing) { 
      throw "Not upgraded"; 
     } 
     request.result.onversionchange = function(e) { 
      if (e.newVersion === null) { // An attempt is made to delete the db 
       e.target.close(); // Manually close our connection to the db 
      } 
     }; 

     if(typeof db != 'undefined' && !window.refreshing) { 
      // We load the store with the records here, attempting to add records via ajax doesn't work 
      // looks like we'll ahve to load them via ajax before initialization? 
      var store = getObjectStore(db); 
      for (i=0; i<documents["Rows"].length-1;i++) { 
       store.add(documents["Rows"][i]); 
      } 
     } 
    } 
    request.onerror = function() { 
     throw "Error in open"; 
    } 
} 

function getObjectStore(db, mode = 'readwrite') { 
    if(typeof db != 'undefined') { 
     var tx = db.transaction('docs', mode); 
     return tx.objectStore('docs'); 
    } else { 
     return null; 
    } 
} 

Antwort

0

Um eine Datenbank verwenden, ydn.db.deleteDatabase("DocsDB") zu löschen.

+0

Ja, ich weiß, wie man das macht, aber gibt es ein Ereignis, wie 'onsolsuccess', damit das Löschen den' open() 'aufrufen kann, nachdem die db gelöscht wurde? – MB34

+0

Ok, habe die '.done()'/'.fail()' Versprechungen in den Dokumenten gefunden. versuchte, '.onsuccess()'/'.onerror()' zu verwenden. Veröffentlichen Sie ein Beispiel, das Sie mit Ihrer Bibliothek verwenden können. – MB34

+1

Ich habe das modifizierte Beispiel einem Ticket in Ihrem GitHub-Repository hinzugefügt. https://github.com/yathit/ydn-db/issues/105 – MB34

Verwandte Themen