成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于Firefox 10的IndexedDB實例演示

數(shù)據(jù)庫 其他數(shù)據(jù)庫
今天做一個IndexedDB(以下簡稱IDB)的demo,運行環(huán)境是Firefox 10。我們做一個閱讀列表的頁面,可以讓用戶把任意網(wǎng)址存入這個閱讀列表中,并為每一個網(wǎng)址起一個名字,也可以隨時刪除,且列表可以按網(wǎng)址自動去重。

今天做一個IndexedDB(以下簡稱IDB)的demo,運行環(huán)境是Firefox 10。

DEMO演示鏈接 (firefox 10+ only)

我們做一個閱讀列表的頁面,可以讓用戶把任意網(wǎng)址存入這個閱讀列表中,并為每一個網(wǎng)址起一個名字,也可以隨時刪除,且列表可以按網(wǎng)址自動去重。

正如上一篇文章介紹的步驟,我們先初始化數(shù)據(jù)庫,然后建表,然后把添加/刪除/讀取網(wǎng)址的事件和數(shù)據(jù)庫操作綁定在一起。

首先是html代碼:

  1. _body onload="init()"> 
  2.     _button onclick="clickAddBtn()">Add_/button> 
  3.     _ul id="list">_/ul> 
  4. _/body> 

為了演示方便,我們引入jQuery作界面處理,再聲明一個全局變量db,作為數(shù)據(jù)庫連接的句柄;再聲明一個全局變量list,作為網(wǎng)頁中列表元素的jQuery句柄。

  1. var db;  
  2. var list = $('#list'); 

然后定義數(shù)據(jù)庫初始化的行數(shù)init

  1. function init() {  
  2.     var req = window.mozIndexedDB.open('readinglist', '1.0');  
  3.     req.onsuccess = function (e) {  
  4.         db = this.result;  
  5.         // TODO: 連接成功后展示列表  
  6.     };  
  7.     req.onupgradeneeded = function (e) {  
  8.         db = this.result;  
  9.         // TODO: 版本不同時創(chuàng)建一個新的object store  
  10.     };  

這段代碼的作用是初始化數(shù)據(jù)庫(readinglist)連接,并在第一次連接數(shù)據(jù)庫時創(chuàng)建表(links)。我們把展示列表的函數(shù)定義為showList(),把創(chuàng)建表的代碼也補充完整,即:

  1. function init() {  
  2.     var req = window.mozIndexedDB.open('readinglist', '1.0');  
  3.     req.onsuccess = function (e) {  
  4.         db = this.result;  
  5.         showList();  
  6.     };  
  7.     req.onupgradeneeded = function (e) {  
  8.         db = this.result;  
  9.         db.createObjectStore('links', {keyPath: 'url'});  
  10.     };  

然后我們定義添加/刪除/展示鏈接的函數(shù):add(title, url)/remove(url)/showList()

  1. function add(title, url) {  
  2.     var link = {  
  3.         title: title,  
  4.         url: url  
  5.     }; // 創(chuàng)建要存儲的對象  
  6.     var transaction = db.transaction('links', IDBTransaction.READ_WRITE);  
  7.     var store = transaction.objectStore('links');  
  8.     var req = store.put(link); // put的作用是key存在時做更新處理,不存在是做添加處理  
  9.     req.onsuccess = showList; // 添加成功后重新展示列表  
  10. }  
  11.  
  12. function remove(url) {  
  13.     var transaction = db.transaction('links', IDBTransaction.READ_WRITE);  
  14.     var store = transaction.objectStore('links');  
  15.     var req = store.delete(url); // 刪除此鏈接  
  16.     req.onsuccess = showList; // 刪除成功后重新展示列表  
  17. }  
  18.  
  19. function showList() {  
  20.     // TODO: clear element: #list  
  21.  
  22.     var transaction = db.transaction('links');  
  23.     var store = transaction.objectStore('links');  
  24.     var range = IDBKeyRange.lowerBound(0); // 創(chuàng)建關(guān)鍵字范圍描述  
  25.     var req = store.openCursor(range); // 創(chuàng)建在上述范圍內(nèi)遍歷的游標(biāo)  
  26.     req.onsuccess = function (e) {  
  27.         var result = this.result;  
  28.         if (result) {  
  29.             var link = result.value;  
  30.             // TODO: append this link to element: #list  
  31.             result.continue();  
  32.         }  
  33.     };  

注意這里的IDBKeyRange和store.openCursor是用來遍歷列表的,前者確定遍歷的范圍,后者根據(jù)前者的范圍逐條觸發(fā)onsuccess事件,這里定義的遍歷范圍是大于0,即所有非空的url,其實所有js類型的值都是可以在一起比大小的,如果想測試比較任意兩個key的大小,可以運行函數(shù)window.mozIndexedDB.cmp(any first, any second)。

最后,我們把最后兩個TODO的部分補充完整,再把界面上的事件綁定好。編碼工作就完成了。

  1. function showList() {  
  2.     list.empty();  
  3.  
  4.     var transaction = db.transaction('links');  
  5.     var store = transaction.objectStore('links');  
  6.     var range = IDBKeyRange.lowerBound(0); // 創(chuàng)建關(guān)鍵字范圍描述  
  7.     var req = store.openCursor(range); // 創(chuàng)建在上述范圍內(nèi)遍歷的游標(biāo)  
  8.     req.onsuccess = function (e) {  
  9.         var result = this.result;  
  10.         if (result) {  
  11.             var link = result.value;  
  12.             appendLink(link);  
  13.             result.continue();  
  14.         }  
  15.     };  
  16. }  
  17.  
  18. function appendLink(link) {  
  19.     var url = link.url;  
  20.     var title = link.title;  
  21.     var li = $('_li>_a href="#" target="_blank">_/a> _button>X_/button>_/li>');  
  22.     li.find('a').attr('title', title).attr('href', url).text(title);  
  23.     li.find('button').click(function (e) {  
  24.         remove(link.url);  
  25.     });  
  26.     list.append(li);  
  27. }  
  28.  
  29. function clickAddBtn(e) {  
  30.     var title = prompt('please input the title') || '[No title]';  
  31.     var url = prompt('please input the url', 'http://');  
  32.     if (title && url) {  
  33.         add(title, url);  
  34.     }  

DEMO演示鏈接 (firefox 10+ only)

下一篇討論webkit下使用IDB的注意事項,并提供兼容問題的解決辦法。

【系列文章】

  1. IndexedDB的JS接口設(shè)計詳解
  2. 淺析IndexedDB存數(shù)結(jié)構(gòu)
  3. 調(diào)試IndexedDB應(yīng)用程序

原文:http://bulaoge.net/topic.blg?dmn=g3g4&tid=2335030#Content

責(zé)任編輯:陳貽新 來源: 趙錦江的博客
相關(guān)推薦

2013-01-14 12:53:13

Firefox OSIndexedDB

2012-09-12 09:08:54

Firefox OS

2010-05-27 09:38:59

MySQL Grant

2010-04-20 08:53:42

Oracle左連接

2010-05-18 09:02:55

MySQL條件查詢

2010-07-21 09:50:12

SQL Server子

2010-07-05 15:04:36

SQL Server刪

2010-05-31 18:06:07

MySQL 觸發(fā)器

2010-07-14 10:03:40

SQL Server

2009-07-17 17:16:48

Spring iBAT

2010-04-28 11:56:09

Oracle臨時表

2010-05-12 18:41:34

MySQL數(shù)據(jù)庫

2010-11-22 16:01:08

C++多態(tài)

2010-03-02 13:43:01

WCF事務(wù)演示

2009-08-18 10:17:25

C#枚舉類型

2010-06-01 16:50:29

MySQL存儲過程

2010-07-22 09:33:45

SQL Server全

2010-07-21 17:07:42

SQL Server

2010-04-21 15:02:50

Oracle使用游標(biāo)

2010-04-14 12:51:04

Oracle動態(tài)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 中文字幕视频在线观看免费 | 亚洲视频一区在线观看 | 午夜久久久久久久久久一区二区 | 午夜寂寞影院在线观看 | 国产精品久久久久久久久久久久久 | 亚洲 欧美 另类 综合 偷拍 | 久久精品国产一区二区电影 | 欧美在线一区二区三区 | 国产又爽又黄的视频 | 毛片区 | 精品日韩一区二区三区 | 久久99精品国产 | 国产精品一区二区福利视频 | 综合久久亚洲 | 国产网站在线播放 | 国产精品爱久久久久久久 | 99免费看 | 成人午夜免费福利视频 | 91在线免费视频 | 久久久久久国产免费视网址 | 精品国产91乱码一区二区三区 | 久久综合国产精品 | 天天摸天天看 | 九一国产精品 | 日韩久久在线 | 国产成人av在线 | 国产高清精品一区二区三区 | 亚洲视频网 | 96av麻豆蜜桃一区二区 | 亚洲一区二区三区免费视频 | 成人精品一区二区三区四区 | a看片| 日韩在线一区二区三区 | 毛片网站免费观看 | 91高清免费 | 九色av | 在线中文字幕视频 | 色精品视频 | jdav视频在线观看免费 | 国产一区精品 | 国产又爽又黄的视频 |