대부분의 turorial에는 커서로 반복하여 객체 저장소에서 모든 레코드를 검색하는 방법이 나와 있습니다. 그러나 키 "myKey"를 사용하여 객체 저장소에서 값을 검색하는 방법은 무엇입니까?Html5 IndexedDB - 키를 사용하여 값 검색
답변
간단한 키/값 저장을 원할 경우 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')));
당신이 키의 키 또는 범위에 대해 여러 값을 얻을 필요가있는 경우에만, 색인화의 핵심에서 단일 값을 얻기 위해 커서를 필요로하지 않습니다 말했다.
myKey
가게를 만들 때()에 추가하여 기본 키
1) 경우 : 키에서 값을 얻으려면, 당신은 두 가지 중 하나를 할
이var request = transaction.get(key);
당신은 다음 추가 할 수 onsuccess
및 onerror
콜백을 사용하여 event.target.result
값을 추출 할 결과 이벤트 객체를 구문 분석합니다.
2) myKey
이 기본이 아닌 색인 (상점을 만든 후 추가 한 색인)에있는 경우 거래에서 색인을 연 다음 색인에서 커서를여십시오. (같은 키에 저장된 여러 값을 가질 때마다 일을해야하기 때문에 가능성이 더 자주 논의 참조) 커서에 관해서는
var transaction_index = transaction.index(index);
var request = transaction_index.get(key);
, 당신은뿐만 아니라 하나의 키 값을 검색하는 사람들을 사용할 수 있습니다.
the spec 말한다 :
A key range may consist of a single value.
당신은 IDBKeyRange
개체를 사용하여 keyRange
을 생성해야합니다. 다음은 MIT-licensed InDB (내 작업 중 IndexedDB wrapper)의 도우미 메소드로, 단일 값 (예 : InDB.range.get(value)
) 또는 키 범위에서 커서를 여는 작업을 처리합니다. 당신이 keyRange
이 있으면
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;
}
}
, 당신은 두 가지 중 하나를 수행합니다 myKey
가게를 만들 때 추가 된 기본 키()이다
1) 경우에, 당신은 당신의 거래에 정기적 커서를 열어 (선택적 방향으로). myKey
가 (기본이 아닌 인덱스에 당신이 가게를) 만든 후 추가 한 하나의 경우
var request = transaction.openCursor(keyRange, direction);
2), 당신은 당신의 거래에 인덱스를 열고 인덱스에 커서를 엽니 다.
var transaction_index = transaction.index(index);
var request = transaction_index.openCursor(keyRange, direction);
- 1. Indexeddb : 와일드 카드를 사용하여 검색
- 2. Access 2000의 컬렉션에서 키를 사용하여 값 검색
- 3. 지도 키를 사용하여 Java지도에서 객체 값 검색
- 4. 지도에서지도의 키를 기반으로 값 검색
- 5. arrayList의 두 키를 사용하여 검색
- 6. indexedDB 용 GWT 라이브러리
- 7. addObjectsFromArray를 사용하여 NSMutableArray에서 값 검색
- 8. IndexedDB InvalidStateError, windows 8
- 9. html5 html5 검색 입력 이벤트
- 10. maps.LatLng in indexeddb
- 11. sqlite3_column_double을 사용하여 float 값 검색
- 12. XQUERY를 사용하여 속성 값 검색
- 13. JPA를 사용하여 단일 값 검색?
- 14. DNN : Enter 키를 사용하여 검색 제출
- 15. HTML5 동영상 스트리밍/검색
- 16. NullReferenceException이 검색 값
- 17. 값 또는 키를 사용해야합니까?
- 18. indexedDB XML 스키마?
- 19. 관계형 IndexedDB 래퍼
- 20. Firefox에서 웹 작업자의 IndexedDB
- 21. HTML5 로컬 스토리지 값
- 22. X 검색 브러시에서 키를
- 23. SetupAPI를 사용하여 .inf 파일의 줄 키를 검색 할 수 있습니까?
- 24. HTML5 맞춤 속성 업데이트 값
- 25. ESC 키를 사용하여 html5 비디오 전체 화면에서 나가기
- 26. 키보드 이동 키를 사용하여 html5 범위 슬라이더 핸들을 이동하는 방법
- 27. IndexedDB 커서로 페이징
- 28. Google 크롬 - IndexedDB - 할당량
- 29. indexedDB 쿼리의 결과 정렬
- 30. indexedDB 불일치 읽기
"var request = transaction.get (key);" 오류가 발생합니다 : "Uncaught TypeError : Object #에는 'get'메서드가 없습니다. 난 당신이 작성한대로 트랜잭션이 아닌 objectStore에 .get() 메서드를 호출해야한다고 생각합니다. 그게 맞습니까? –
Matthew
트랜잭션을 통해 객체 저장소 데이터에만 액세스 할 수 있지만'objectStore'에서'get()'을 호출하는 것이 옳습니다. 'transaction'에 대한 var 선언은 여기에 표시되지 않지만'event.objectStore (database)'와 같을 것입니다. – buley
주목할만한 점은 데이터베이스 (http://www.w3.org/TR/IndexedDB/#idl-def-IDBDatabase)의 'var event = database'에서 트랜잭션을 여는 것입니다.트랜잭션 ([database], type, timeout); – buley