2017-01-09 91 views
0

以下工作代碼用於設置我的問題:更新在IndexedDB的單場

myRequest = indexedDB.deleteDatabase('myDatabase') 
 
myRequest.onsuccess \t = function() { 
 
\t var myRequest 
 
\t 
 
\t myRequest = indexedDB.open('myDatabase') 
 
\t myRequest.onupgradeneeded = function(response) { 
 
\t \t var myDatabase 
 
\t \t \t ,myObjectStore 
 
\t \t 
 
\t \t myDatabase = response.target.result 
 
\t \t myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true}) 
 
\t } 
 
\t myRequest.onerror = function(response) { 
 
\t \t debugger 
 
\t } 
 
\t myRequest.onsuccess = function(response) { 
 
\t \t var myTransaction 
 
\t \t \t ,myObjectStore 
 
\t \t \t ,myRequest 
 
\t \t \t ,obj = {} 
 
\t \t window.myDatabase = response.target.result 
 
\t \t myTransaction = myDatabase.transaction(['myData'],'readwrite') 
 
\t \t myObjectStore = myTransaction.objectStore('myData') 
 
\t \t obj.field1 = 'a' 
 
\t \t obj.field2 = 'b' 
 
\t \t myObjectStore.add(obj) 
 
\t } 
 
}

問:我怎麼說相當於:

update myData set field2='c' where key=1 

我是否必須在.put語句中提供field1和field2?

回答

2

是的,你必須把完整的對象,例如

myObjectStore.get(1).onsuccess = function(e) { 
    var obj = e.target.result; 
    obj.field2 = 'c'; 
    myObjectStore.put(obj, 1); 
}; 
+0

謝謝約書亞。你的回答真的幫了我。我注意到的一件事是,在put語句中不需要主鍵,因爲它在get結果中提供。 –

+0

如果你把()沒有一個鍵,而商店有autoIncrement設置,你會得到一個新的記錄,不會覆蓋以前的記錄....除非你使用內嵌鍵(即對象存儲有keyPath指定,你的例子中沒有。) –