phonegap入門(二)-使用html5API存儲信息到本地

    在傳統web應用中,一般使用的是B/S結構,即瀏覽器和遠程服務器。瀏覽器只是控制用戶的界面響應,服務器儘量做到快速產生web頁以及存儲持久化數據。這種重服務器輕瀏覽器的方法大大加重服務器的負擔。而且在網絡速度不理想的狀態下,也會影響到響應的速度。


    但在html5的API提供了本地存儲的功能,減少了傳輸那些不必要的數據,加快了傳輸速度,減輕了服務器的負擔。下面的一個例子展示瞭如何通過api存儲數據在本地。建立一個簡單的表單,可以輸入水果名稱,點擊按鈕可以存儲在本地。


1、在工程根目錄下創建一個index.html


2、編輯index.html,如下

<html>
  <head>
    <title>Sites Without Servers</title>
    <style>
          body {
            background: white;
          }
              div#main {
    background: #ccc;
          border: black 1px solid;
    height: 82%;
    padding: 10%;
    width: 80%;
    -webkit-border-radius: 8px;
  }
    </style>
    <meta name=»viewport» content=»width=device-width, initial- 
     scale=1.0»></meta>    
  </head>
  <body>
    <div id=»main»>
        <h1>List Some Food</h1>
        <form id=»foodForm»>
          <input type=»text» id=»foodName» placeholder=»A name of  
           a food» />
          <button id=»submitFood»>Tell Us!</button><br>

</form>
    </div>
  </body>
</html>


3、現在你可以在Safari瀏覽器中看到如下效果



4、你還可以在input元素中使用Html5的placeholder屬性,給用戶一個提示。


5、接下來我們可以添加javascript來獲取表單的提交事件,當按下按鈕,就會根據填入名稱插入一個food元素。如下所示:

<script>
    document.addEventListener(«DOMContentLoaded», function () {
      var foodList = document.getElementById(“foodList');
      var foodField = document.getElementById(”foodName');

     document.getElementById(«foodForm»).
addEventListener(“submit”, function (evt) {
        evt.preventDefault();
        var newFood = foodField.value;
        var newFoodItem = document.createElement(“li”);
        newFoodItem.innerHTML = newFood;
        foodList.appendChild(newFoodItem);
        foodField.value = “”;
        return false;
      }, false);
    });
  </script>


6、我再在表單末尾添加<ul>元素,如下:

     <ul id=“foodList”>
  </ul>


效果如圖所示:



8、現在,如果我們重新加載頁面,foods列表將會消失。讓我們試着把foods 信息保存起來。我們使用HTML5 LocalStorage API,在appendChild後添加如下代碼:

var foodKey = "food." + (window.localStorage.length + 1);
window.localStorage.setItem(foodKey, newFoodItem);


9、我們稍微整理一下代碼,把添加新元素的代碼抽取放到一個方法中,紅體字就是我們的核心,不熟悉這個html5 存儲功能API可以參考我的博客web Storage總結,完整代碼如下所示:

<script>
document.addEventListener(«DOMContentLoaded», function () {
    var foodList = document.getElementById(‹foodList');
    var foodField = document.getElementById(‹foodName');
    var l = window.localStorage.length;
    var i = 0;
    var storedFoodName;
    function addNewFoodItem(foodName) {
      var newFoodItem = document.createElement('li');
      newFoodItem.innerHTML = foodName;
      foodList.appendChild(newFoodItem);
    }
    for (i; i < l; i++) {
      storedFoodName = window.localStorage.key(i);
      if (storedFoodName.match(/^food[.]/))
      addNewFoodItem(window.localStorage.getItem(storedFoodName))
    }

        document.getElementById("foodForm").
addEventListener("submit", function (evt) {
      evt.preventDefault();
      var newFood = foodField.value;
      var foodKey = "food." + (window.localStorage.length + 1);

     addNewFoodItem(newFood)
      window.localStorage.setItem(foodKey, newFood);
      foodField.value = "";
      return false;
    }, false);
  }, false);
</script>


10、最後我在支持html5的瀏覽器(phonegap)中測試,當重新加載頁面,foods的列表信息就不會消失掉了,能持久保持。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章