在大多数turorial中,它展示了如何通过用光标迭代它来从对象存储中检索所有记录.但是如何通过键"myKey"从对象存储中检索值?
如果您正在寻找简单的键/值存储,那么您可能需要考虑localStorage
.它比使用IndexedDB简单得多.它只适用于字符串(到目前为止),但对象很容易通过JSON对象进行字符串化.
console.log( 'BEFORE', localStorage.getItem( 'test-key' ) );
localStorage.setItem( 'test-key', JSON.stringify( { 'foo': Math.round( Math.random() * 1000 ) } ) );
console.log( 'AFTER', JSON.parse( localStorage.getItem( 'test-key' ) ) );
Run Code Online (Sandbox Code Playgroud)
也就是说,只有当您需要为一个键或一系列键获取多个值时,才需要游标从IndexedDB中的键中获取单个值.要从密钥中获取值,您可以执行以下两项操作之一:
1)如果myKey
是您的主键(在创建商店时添加):
var request = transaction.get( key );
Run Code Online (Sandbox Code Playgroud)
然后,您可以添加一个onsuccess
和onerror
回调来解析生成的事件对象,您将从中提取该event.target.result
值.
2)如果myKey
是非主索引(您在创建商店后添加的索引),则打开事务上的索引,然后在索引上打开游标.
var transaction_index = transaction.index( index );
var request = transaction_index.get( key );
Run Code Online (Sandbox Code Playgroud)
至于游标(您可能会更频繁地讨论这个游标,因为只要您在同一个键下存储了多个值,就需要使用游标),您也可以使用这些游标来检索单个键的值.说规格:
键范围可以包含单个值.
您需要keyRange
使用该IDBKeyRange
对象生成一个.这是来自MIT许可的InDB(我正在进行的工作中的IndexedDB包装器)的辅助方法,它处理在单个值(例如InDB.range.get( value )
)或键范围上打开游标.
InDB.range.get = function ( value, left_bound, right_bound, includes_left_bound, includes_right_bound ) {
if ( InDB.exists( left_bound ) && InDB.exists( right_bound ) && InDB.exists( includes_left_bound ) && InDB.exists( includes_right_bound ) ) {
return IDBKeyRange.bound( left_bound, right_bound, includes_left_bound, includes_right_bound );
} else if ( InDB.exists( left_bound ) && InDB.exists( includes_left_bound ) ) {
return IDBKeyRange.lowerBound( left_bound, includes_left_bound );
} else if ( InDB.exists( right_bound ) && InDB.exists( includes_right_bound ) ) {
return IDBKeyRange.upperBound( right_bound, includes_right_bound );
} else if ( InDB.exists( value ) ) {
return IDBKeyRange.only( value );
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
完成后keyRange
,您可以执行以下两项操作之一:
1)如果myKey
是您的主键(在创建商店时添加),则在事务上打开常规游标(带有可选方向).
var request = transaction.openCursor( keyRange, direction );
Run Code Online (Sandbox Code Playgroud)
2)如果myKey
是非主索引(您在创建商店后添加的索引),则打开事务上的索引,然后在索引上打开游标.
var transaction_index = transaction.index( index );
var request = transaction_index.openCursor( keyRange, direction );
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7095 次 |
最近记录: |