2012-04-08 21 views
1

我想通過創建一個普通的記事本應用程序來學習IndexedDB的基礎知識。在此環境中使用有序列表時遇到困難。使用IndexedDB中的有序列表

我不知道如何實現的功能是有一個有序的筆記列表。

我第一次嘗試中的WebSQL實現記事本應用程序,我覺得這是很容易選擇這樣的註釋:

select * from notes order by position 

,並在指定位置插入一個音符的時候,我第一次做...

update notes set position = position + 1 where position >= insert_position 

...移動每個音符以在位置insert_position處爲新音符留出空間。

但我看到WebSQL實際上已被棄用。

在IndexedDB中實現這種功能有什麼可能?我不完全瞭解如何在諸如IndexedDB的環境中創建有序列表,因爲像上面這樣的快速查詢不適用。

作爲一個方面說明,我知道可以在IndexedDB中存儲一個數組,但是我只需要每次使用一條記錄。我寧願尋找一種方式來以某種方式擁有所有記錄的有序列表(每個記錄代表一個筆記),並且能夠更新排序(如上面的變換查詢)。

是否有人可以對有序列表的IndexedDB方式進行說明?

回答

2

與許多事情一樣,有幾種方法可以破解這個螺母。

如果您正在創建一個基於創建時間對筆記進行訂購的應用程序,它將與使用自動遞增鍵(此標誌在創建時指定此標誌)一樣簡單。注意一個會有id(又名primaryKey)1,第二個2等等。這將使用默認的keyPath,所以你可以打開遊標而不必創建索引。

要訂購的東西可能會改變,比如修改時間記錄,你會創建該字段的索引,一定要指定它的時候addingputting對象。你會打開一個下限爲0的遊標(按字母順序排列的鍵表示這是在所有字符串之前)並且保持上界開放。然後,您將在每行中逐個光標移動onsuccess處理程序,直到耗盡遊標並在event. target.result中返回空值。

這聽起來像你可能希望有一個領域,如「位置」和順序。如上所述,這對於常規索引和遊標是完全可行的。建議的一個注意事項是將position字段設置爲浮點數而不是整數,如前所述,您可以更新該訂單而不必更改任何其他行(position n = ((position 1 + position 2)/2))。

+0

非常感謝您的幫助。浮點想法對我來說是新的,看起來很有趣,謝謝! – pimvdb 2012-04-10 10:35:02