日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
HTML5 Indexed DB入門導(dǎo)學(xué)2

在本系列教程的第一篇http://developer.51cto.com/art/201310/412224.htm   中,我們向大家介紹了IndexedDB的基本知識(shí),在本篇教程中,將繼續(xù)向大家介紹如何使用IndexedDB進(jìn)行CRUD(增刪改查)的功能,其中將特別將講解IndexedDB的更新和刪除功能,并且將會(huì)演示一個(gè)實(shí)際的例子,這個(gè)例子在第三篇教程中將會(huì)用到。

創(chuàng)新新互聯(lián),憑借10多年的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)經(jīng)驗(yàn),本著真心·誠(chéng)心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有1000多家案例。做網(wǎng)站建設(shè),選創(chuàng)新互聯(lián)。

更新記錄

首先看下如何在IndexedDB中更新記錄。如果記得上一篇教程的話,增加數(shù)據(jù)是很簡(jiǎn)單的,如下:

 
 
 
 
  1.  //定義person 
  2. var person = { 
  3.     name:name, 
  4.     email:email, 
  5.     created:new Date() 
  6.   
  7. // 定義增加操作 
  8. var request = store.add(person); 

對(duì)于更新操作,如果已經(jīng)在對(duì)象中已經(jīng)定義了id作為key,則只需要使用put方法代替add方法即可,代碼如下:

 
 
 
 
  1. var person = { 
  2.     name:name, 
  3.     email:email, 
  4.     created:new Date(), 
  5.     id:someId 
  6.   
  7. var request = store.put(person); 

和增加的方法一樣,可以指定各類回調(diào)方法對(duì)結(jié)果進(jìn)行異步處理。

刪除記錄

刪除記錄的方法是通過delete這個(gè)API去實(shí)現(xiàn),下面是例子:

 
 
 
 
  1. var t = db.transaction(["people"], "readwrite"); 
  2. var request = t.objectStore("people").delete(thisId); 

同樣,可以指定各類回調(diào)方法對(duì)結(jié)果進(jìn)行異步處理。

在學(xué)會(huì)了如何使用IndexedDB進(jìn)行CRUD后,下面我們以一個(gè)實(shí)際的例子來設(shè)計(jì)一個(gè)簡(jiǎn)單的記事本應(yīng)用?!?/p>

記事本應(yīng)用

下面我們來學(xué)習(xí)如何使用學(xué)到的IndexedDB知識(shí),設(shè)計(jì)一個(gè)簡(jiǎn)單的記事本應(yīng)用。在應(yīng)用啟動(dòng)的時(shí)候,先初始化IndexedDB數(shù)據(jù)庫,并且展示一個(gè)空的表格,能讓用戶增加空的記錄。界面如下圖:

當(dāng)先“Add Note”按鈕后,出現(xiàn)的界面如下圖:

可以在這里輸入要記錄的事情,然后點(diǎn)Save鍵保存。保存后的列表界面如下圖:

#p#

同時(shí)用戶可以再次編輯或刪除記事的內(nèi)容。下面我們首先開始設(shè)計(jì)第一個(gè)頁面,注意我們使用的是bootstrap框架。

 
 
 
 
  1.  
  2.  
  3.    
  4.      
  5.      
  6.   
  7.     Note Database 
  8.   
  9.      
  10.      
  11.   
  12.    
  13.   
  14.    
  15.   
  16.      
  17.        
  18.          
  19.           Note Database 
  20.         
 
  •       
  •  
  •     
  •  
  •   
  •      
  •   
  •         
  •  
  •         Add Note
  •  
  •         
  •  
  •   
  •          
  •             

    Edit Note

     
  •              
  •              
  •              
  •                 Title 
  •                  
  •                  
  •                 
  •  
  •             
  •  
  •              
  •                 Body    
  •                  
  •                  
  •                 
  •  
  •             
  •  
  •              
  •                  
  •                     Save Note 
  •                 
  •  
  •             
  •  
  •              
  •          
  •   
  •      
  •   
  •      
  •      
  •      
  •    
  •  
  • 接下來是編寫核心的js文件,首先是一個(gè)處理日期的工具類,比較簡(jiǎn)單:

     
     
     
     
    1. /* global console,$,document,window,alert */ 
    2. var db; 
    3.   
    4. function dtFormat(input) { 
    5.     if(!input) return ""; 
    6.     var res = (input.getMonth()+1) + "/" + input.getDate() + "/" + input.getFullYear() + " "; 
    7.     var hour = input.getHours(); 
    8.     var ampm = "AM"; 
    9.     if(hour === 12) ampm = "PM"; 
    10.     if(hour > 12){ 
    11.         hour-=12; 
    12.         ampm = "PM"; 
    13.     } 
    14.     var minute = input.getMinutes()+1; 
    15.     if(minute < 10) minute = "0" + minute; 
    16.     res += hour + ":" + minute + " " + ampm; 
    17.     return res; 

    接下來的代碼中,要首先檢查瀏覽器是否支持IndexedDB,如果支持IndexedDB,則打開數(shù)據(jù)庫,代碼如下:

     
     
     
     
    1. $(document).ready(function() { 
    2.   
    3.     if(!("indexedDB" in window)) { 
    4.         alert("IndexedDB support required for this demo!"); 
    5.         return; 
    6.     } 
    7.   
    8.     var $noteDetail = $("#noteDetail"); 
    9.     var $noteForm = $("#noteForm"); 
    10.   
    11.     var openRequest = window.indexedDB.open("nettuts_notes_1",1); 
    12.   
    13.     openRequest.onerror = function(e) { 
    14.         console.log("Error opening db"); 
    15.         console.dir(e); 
    16.     }; 
    17.   
    18.     openRequest.onupgradeneeded = function(e) { 
    19.   
    20.         var thisDb = e.target.result; 
    21.         var objectStore; 
    22.   
    23.         //創(chuàng)建記錄 
    24.         if(!thisDb.objectStoreNames.contains("note")) { 
    25.             console.log("I need to make the note objectstore"); 
    26.             objectStore = thisDb.createObjectStore("note", { keyPath: "id", autoIncrement:true });   
    27.         } 
    28.   
    29.     }; 
    30.   
    31.     openRequest.onsuccess = function(e) { 
    32.         db = e.target.result; 
    33.   
    34.         db.onerror = function(event) { 
    35.          //處理所有的數(shù)據(jù)異常 
    36.           alert("Database error: " + event.target.errorCode); 
    37.           console.dir(event.target); 
    38.         }; 
    39.   
    40.         displayNotes(); 
    41.   
    42.     }; 

    #p#

    在上面的代碼中,首先判斷用戶的瀏覽器是否支持IndexedDB,如果支持的話,則打開數(shù)據(jù)庫,在其中的onupgradeneeded事件中建立名為note的objectstore,并且注意這里要編寫對(duì)應(yīng)的操作成功和失敗的回調(diào)處理事件。一切準(zhǔn)備就緒后,則可以調(diào)用displayNotes()方法顯示所有的記事列表,其代碼如下:

     
     
     
     
    1. function displayNotes() { 
    2.   
    3.     var transaction = db.transaction(["note"], "readonly");   
    4.     var content="TitleUpdated&nbsp;"; 
    5.   
    6.     transaction.oncomplete = function(event) { 
    7.         $("#noteList").html(content); 
    8.     }; 
    9.   
    10.     var handleResult = function(event) {   
    11.       var cursor = event.target.result;   
    12.       if (cursor) {   
    13.         content += ""+cursor.value.title+""; 
    14.         content += ""+dtFormat(cursor.value.updated)+""; 
    15.   
    16.         content += "Edit Delete"; 
    17.         content +=""; 
    18.         cursor.continue();   
    19.       }   
    20.       else {   
    21.         content += ""; 
    22.       }   
    23.     }; 
    24.   
    25.     var objectStore = transaction.objectStore("note"); 
    26.   
    27.     objectStore.openCursor().onsuccess = handleResult; 
    28.   

    在本系列教程的第一篇中,已經(jīng)討論過如何循環(huán)讀取IndexedDB中的數(shù)據(jù)(使用的是游標(biāo) cursor,還記得么?),但在上面的這段代碼中,我們?cè)趏bjectStore.openCursor()事件的onsuccess方法中,指定了其回調(diào)處理代碼為handleResult,而在handleResult方法中,完成了對(duì)數(shù)據(jù)庫中數(shù)據(jù)的循環(huán)讀取列表。而在IndexedDB中允許直接在最頂層的事務(wù)中綁定onComplete事件,這就給我們帶來了方便,比如例子中可以將比如大量的文本輸出(這里的content)交給前端jQuery進(jìn)行顯示處理。

    接下來看刪除,編輯和增加記事的功能代碼:

     
     
     
     
    1. $("#noteList").on("click", "a.delete", function(e) { 
    2.     var thisId = $(this).parent().parent().data("key"); 
    3.   
    4.     var t = db.transaction(["note"], "readwrite"); 
    5.     var request = t.objectStore("note").delete(thisId); 
    6.     t.oncomplete = function(event) { 
    7.         displayNotes(); 
    8.         $noteDetail.hide(); 
    9.         $noteForm.hide(); 
    10.     }; 
    11.     return false; 
    12. }); 
    13.   
    14. $("#noteList").on("click", "a.edit", function(e) { 
    15.     var thisId = $(this).parent().parent().data("key"); 
    16.   
    17.     var request = db.transaction(["note"], "readwrite")   
    18.                     .objectStore("note")   
    19.                     .get(thisId);   
    20.     request.onsuccess = function(event) {   
    21.         var note = request.result; 
    22.         $("#key").val(note.id); 
    23.         $("#title").val(note.title); 
    24.         $("#body").val(note.body); 
    25.         $noteDetail.hide(); 
    26.         $noteForm.show(); 
    27.     }; 
    28.   
    29.     return false; 
    30. }); 
    31.   
    32. $("#noteList").on("click", "td", function() { 
    33.     var thisId = $(this).parent().data("key"); 
    34.     var transaction = db.transaction(["note"]);   
    35.     var objectStore = transaction.objectStore("note");   
    36.     var request = objectStore.get(thisId); 
    37.   
    38.     request.onsuccess = function(event) {   
    39.         var note = request.result; 
    40.         $noteDetail.html("

      "+note.title+"

      "+note.body+"

      ").show(); 
    41.         $noteForm.hide(); 
    42.     };   
    43. }); 
    44.   
    45. $("#addNoteButton").on("click", function(e) { 
    46.     $("#title").val(""); 
    47.     $("#body").val(""); 
    48.     $("#key").val(""); 
    49.     $noteDetail.hide(); 
    50.     $noteForm.show();        
    51. }); 

    只要用戶讀過本系列教程的第一篇,就應(yīng)該知道上面的代碼并不復(fù)雜,關(guān)鍵點(diǎn)是無論是編輯還是刪除記事,都是必須先找出其id,這其實(shí)通過普通的DOM操作就可以實(shí)現(xiàn)了。接下來看保存記事的代碼:

     
     
     
     
    1. $("#saveNoteButton").on("click",function() { 
    2.   
    3.         var title = $("#title").val(); 
    4.         var body = $("#body").val(); 
    5.         var key = $("#key").val(); 
    6.   
    7.         var t = db.transaction(["note"], "readwrite"); 
    8.   
    9.         if(key === "") { 
    10.             t.objectStore("note") 
    11.                             .add({title:title,body:body,updated:new Date()}); 
    12.         } else { 
    13.             t.objectStore("note") 
    14.                             .put({title:title,body:body,updated:new Date(),id:Number(key)}); 
    15.         } 
    16.   
    17.         t.oncomplete = function(event) { 
    18.             $("#key").val(""); 
    19.             $("#title").val(""); 
    20.             $("#body").val(""); 
    21.             displayNotes(); 
    22.             $noteForm.hide();            
    23.         }; 
    24.   
    25.         return false; 
    26.     }); 
    27.   
    28. }); 

    在上面的代碼中,通過IF語句去判斷KEY是否為空,如果是空的話則表示是新增加記錄,否則就是在更新記錄。

    在本系列教程的下一講,將重點(diǎn)介紹IndexedDB 的檢索功能和數(shù)組方面的功能。本講的代碼可以在如下連接下載:https://github.com/tutsplus/working-with-indexeddb-part-two


    網(wǎng)頁名稱:HTML5 Indexed DB入門導(dǎo)學(xué)2
    URL網(wǎng)址:http://www.dlmjj.cn/article/djggcdg.html

    其他資訊