2016-09-07 67 views
2

如何在需要升級的事件中將索引添加到以前創建的對象庫?將索引添加到IndexedDB中的現有對象庫

上一個新的對象存儲這樣做是有據可查的:

request.onupgradeneeded = function(event) { 
    var db = event.target.result; 
    var objectStore = db.createObjectStore("my-store", 
    { keyPath: "id" } 
); 
    objectStore.createIndex("idx_name", "index_this", { unique: false }); 
}; 

但我怎麼能補充一點,我以前創建的索引對象存儲?

request.onupgradeneeded = function(event) { 
    var db = event.target.result; 
    if (!db.objectStoreNames.contains("my-store")) { 
    var objectStore = db.createObjectStore("my-store", 
     { keyPath: "id" } 
    ); 
    } 
    var myStore = ?????????????; 
    if (!myStore.indexNames.contains("idx_name")) { 
    myStore.createIndex("idx_name", "index_this", { unique: false }); 
    } 
}; 

回答

5

你想要從一個被隱從onupgradeneeded功能的範圍內提供給您的交易對象存儲的引用。

function onupgradeneeded(event) { 
    var request = event.target; 
    var tx = request.transaction; 
    var store = tx.objectStore('store-name'); 
    store.createIndex(...); 
} 

請記住,你將不得不重寫你的onupgradeneeded功能,讓你只嘗試拿到店裏是否已經創造了它,而你只嘗試創建索引,如果尚未創建它。有幾種方法可以做到這一點。一種是使用版本號。您可以針對升級之前存在的舊版本或新/當前版本進行測試。例如。如果您願意,請使用event.oldVersion。或者,您可以測試商店是否存在,並分別測試索引是否存在,方法是使用db.objectStoreNames.contains查找商店名稱,然後在store.indexNames.contains中查找索引名稱。

+0

很好,謝謝!以下是我結束的代碼:https://gist.github.com/TalAter/45e0b87ee0cf8b65f943c4320b092b0e –

相關問題