2012-07-18 21 views
10
का प्रयोग करें

मैंने देखा है createIndex का उपयोग कर एक ObjectStore सूचकांक सीधे बाद ObjectStore इस तरह बनाया गया है परिभाषित करने के लिए एक से अधिक जावास्क्रिप्ट उदाहरण आप createObjectStore पर कॉल किए बिना पूर्व-मौजूदा तालिका पर createIndex का उपयोग करेंगे? मुझे लगता है कि असली सवाल यह है कि ऑब्जेक्ट के संदर्भ में createObjectStore का उपयोग किए बिना संदर्भ कैसे प्राप्त करें? onupgradeneeded दौरानसूचकांक पहले से मौजूद करने के लिए IndexedDB में ObjectStore जावास्क्रिप्ट

var objectStore = window.IDBTransaction.objectStore(ObjectStoreName); 
var index = objectStore.createIndex(ixName, fieldName, { unique: unique, multiEntry: multiEntry }); 
+0

request.onupgradeneeded =: आप पुराने या नए डब्ल्यू 3 चश्मा का उपयोग कर एक ObjectStore के लिए एक संदर्भ प्राप्त करना चाहता था, तो यह तो पुराने setVersion आदेश या नई onupgradeneeded घटना के माध्यम से का उपयोग कर onSuccess घटना के माध्यम से एक संभावित समाधान है फ़ंक्शन (evt) { var objectStore = evt.currentTarget.transaction.objectStore ("people"); objectStore.createIndex ("शहर", "शहर", {अद्वितीय: झूठा}); }; // त्वरित उत्तर – Garry

उत्तर

4

आप यह कर, एक ही जगह आप पहली जगह में वस्तु की दुकान कर रहे हैं होना चाहिए जो:

मैं कोई भाग्य के साथ निम्नलिखित के कई रूप की कोशिश की। वहां, आप इसे अपग्रेड करने के लिए जो भी उचित कार्रवाई की आवश्यकता है, जैसे नई अनुक्रमणिका बनाना। Here is an example.

+0

ऑनप्रग्रेडिनेड अभी तक क्रोम में भी आग नहीं लगाता है। यह नवीनतम डब्ल्यू 3 स्पेक का हिस्सा है। यह अच्छा होगा अगर मैं घटनाओं के अलावा किसी अन्य चीज़ का उपयोग करके ऑब्जेक्टस्टोर संदर्भ में कैसे पहुंच सकता हूं? –

+0

और इनमें से कोई भी आईई या ओपेरा या सफारी में बिल्कुल काम नहीं करता है, इसलिए इंडेक्सड डीबी का उपयोग करके सभी का तात्पर्य है कि आप कुछ क्रॉस-ब्राउज़र संगतता का त्याग कर रहे हैं। उम्मीद है कि क्रोम जल्द ही 'onupgradeneeded' का समर्थन करेगा। मुझे लगता है कि मैंने पढ़ा है कि वे इसके लिए क्रोम 22 को लक्षित कर रहे हैं, इसलिए शायद यह कुछ महीनों में क्रोम में काम करेगा। तब तक, आप इस तरह कुछ कर सकते हैं [यह] (http://blog.nparashuram.com/2012/05/indexeddb-setversion-vs-onupgradeneeded.html)। – dumbmatter

+0

और चूंकि मैं पहले पर्याप्त स्पष्ट नहीं था, मुझे लगता है ... जब आप डेटाबेस को अपग्रेड कर रहे हों तो आप केवल अपने ऑब्जेक्ट स्टोर के साथ गड़बड़ कर सकते हैं। कोई अन्य समाधान नहीं है। ['onupgradeneeded' 'बहुत महत्वपूर्ण है, क्योंकि यह आपके कोड में एकमात्र जगह है जिसे आप ऑब्जेक्ट स्टोर्स और इंडेक्स बना सकते हैं।"] (https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB) – dumbmatter

2

क्रोम वर्तमान में ऑन -ग्रैडेडेड ईवेंट का समर्थन नहीं करता है।

var ixDb; 
var ixDbRequest; 
var ixDbVersionTansaction; 

//Check to see if we have a browser that supports IndexedDB 
if (window.indexedDB) { 

ixDbRequest = window.indexedDB.open(dbName, dbVersion); 

//For browsers like chrome that support the old set version method 
ixDbRequest.onsuccess = function (e) { 

    ixDb = ixDbRequest.result || e.result; 

    if (typeof ixDb.setVersion === "function") { 

     //Put your version checking logic here 

     if (oldVersion < newVersion) { 
      var verRequest = ixDb.setVersion(newVersion); 

      verRequest.onerror = function (e) { 
       //handling error logic here 
      } 

      verRequest.onsuccess = function (e) { 
       //Get a reference to the version transaction 
       //from the old setVersion method. 
       ixDbVersionTansaction = verRequest.result; 
       //Create database using function provided by the user. 
       UserFunction(); 
      } 
     } 
    } 
}; 

ixDbRequest.onupgradeneeded = function (e) { 
    //FF uses this event to fire the transaction for upgrades. 
    //All browsers will eventually use this method. Per - W3C Working Draft 24 May 2012 
    ixDb = ixDbRequest.result || e.currentTarget.result; 

    //Get a reference to the version transaction via the onupgradeneeded event (e) 
    ixDbVersionTansaction = e.currentTarget.transaction; 

    //Create database using function provided by the user. 
    UserFunction(); 
}; 

UserFunction(){ 
    //ObjectStore is accessed via ixDbVersionTansaction variable 
    // in either instance (transaction..objectStore("ObjectStoreName")) 
    var ObjectStore = ixDbVersionTansaction.objectStore("ObjectStoreName"); 
    var index = ObjectStore.createIndex("ixName", "fieldName"); 
}