HTML5 离线存储之Web SQL(2)
来源:Asp之家 发布时间:2011-06-19 14:13:19
最后贴出应用的代码,业务相关的代码,不看也罢,谁家与谁家的都不同
1 /*
2 http://stackoverflow.com/questions/2010892/storing-objects-in-html5-localstorage
3 http://www.w3.org/TR/webdatabase/#sqlresultset
4 http://html5doctor.com/introducing-web-sql-databases/
5 http://stackoverflow.com/questions/844885/sqlite-insert-into-with-unique-names-getting-id
6 */
7 var _userStoryProvider= new userStoryProvider();
8 $(document).ready(function () {
9 loadUserStory();
10
11 /* 添加用户故事*/
12 $("#btnAdd").click(function () {
13 var item= { role: $("#role").val(), ability: $("#ability").val(), benefit: $("#benefit").val(), name: $("#Name").val(), importance: $("#Importance").val(), estimate: $("#Estimate").val(), notes: $("#Notes").val() };
14 try {
15 _userStoryProvider.addUserStory(item.role, item.ability, item.benefit, item.name, item.importance, item.estimate, item.notes);
16 loadUserStory();
17 }catch (error) {
18 alert("_userStoryProvider.addUserStory:" + error);
19 }
20 });
21
22 /* 创建用户故事表*/
23 $("#btnCreateTable").click(function () {
24 try {
25 _userStoryProvider.createUserStoryTable();
26 }catch (error) {
27 alert("_userStoryProvider.createUserStoryTable:" + error);
28 }
29 });
30
31 /* 删除用户故事表*/
32 $("#btnDropTable").click(function () {
33 try {
34 _userStoryProvider.dropUserStoryTable();
35 }catch (error) {
36 alert("_userStoryProvider.dropUserStoryTable:" + error);
37 }
38 });
39 });
40
41 /* 加载用户故事*/
42 function loadUserStory() {
43 try {
44 _userStoryProvider.loadUserStories(function (result) {
45 var _userStories= new Array();
46 for (var i= 0; i< result.rows.length; i++) {
47 var o= result.rows.item(i);
48 var _userStory= new userStory(o.id, o.name, o.role, o.ability, o.benefit, o.importance, o.estimate, o.notes);
49 _userStories.push(_userStory);
50 }
51
52 if (!_userStories)return;
53 var table= document.getElementById("user_story_table");
54 if (!table)return;
55 var _trs= table.getElementsByTagName("tr");
56 var _len= _trs.length;
57 for (var i= 0; i< _len; i++) {
58 table.removeChild(_trs[i]);
59 }
60 {
61 var tr= document.createElement("tr");
62 tr.setAttribute("class","product_backlog_row header");
63 {
64 tr.appendChild(CreateTd("id","id"));
65 tr.appendChild(CreateTd("name","name"));
66 tr.appendChild(CreateTd("importance","importance"));
67 tr.appendChild(CreateTd("estimate","estimate"));
68 tr.appendChild(CreateTd("description","role"));
69 tr.appendChild(CreateTd("notes","notes"));
70 tr.appendChild(CreateTd("delete","delete"));
71 };
72 table.appendChild(tr);
73 }
74 for (var i= 0; i< _userStories.length; i++) {
75 CreateRow(table, _userStories[i]);
76 }
77 });
78 }catch (error) {
79 alert("_userStoryProvider.loadUserStories:" + error);
80 }
81 }
82 function CreateRow(table, userStory) {
83 if (!table)return;
84 if (!userStory)return;
85 {
86 var tr= document.createElement("tr");
87 tr.setAttribute("class","product_backlog_row");
88 {
89 tr.appendChild(CreateTd("id", userStory.id));
90 tr.appendChild(CreateTd("name", userStory.name));
91 tr.appendChild(CreateTd("importance", userStory.importance));
92 tr.appendChild(CreateTd("estimate", userStory.estimate));
93 tr.appendChild(CreateTd("description", userStory.role));
94 tr.appendChild(CreateTd("notes", userStory.notes));
95 tr.appendChild(CreateDeleteButton("delete_button", userStory.id));
96 };
97 table.appendChild(tr);
98 }
99 }
100 function CreateTd(name, value) {
101 var td= document.createElement("td");
102 td.setAttribute("class","user_story" + name);
103 td.innerText= value;
104 return td;
105 };
106 function CreateDeleteButton(name, id) {
107 var td= document.createElement("td");
108 td.setAttribute("class","user_story" + name);
109 /* 删除用户故事*/
110 td.innerHTML= "<a href=\"###\" title=\"delete\" onclick=\"javascript:_userStoryProvider.removeUserStory(\'" + id+ "');removeRow(this);\">>>delete</a>";
111 return td;
112 }
113 function removeRow(obj) {
114 document.getElementById("user_story_table").deleteRow(obj.parentNode.parentNode.rowIndex);
115 //obj.parentNode.parentNode.removeNode(true);
116 }
有一个小例子,点这里下载(占位,有点小毛病改好就放)
看完代码复习下基本功课
1,WindowDatabase接口,注意openDatabase方法
[Supplemental, NoInterfaceObject]
interface WindowDatabase {
Da, tabase openDatabase(in DOMString name,in DOMString version,in DOMString displayName,in unsignedlong estimatedSize,in optional DatabaseCallback creationCallback);
};
Window implements WindowDatabase;
[Supplemental, NoInterfaceObject]
interface WorkerUtilsDatabase {
Database openDatabase(in DOMString name,in DOMString version,in DOMString displayName,in unsignedlong estimatedSize,in optional DatabaseCallback creationCallback);
DatabaseSync openDatabaseSync(in DOMString name,in DOMString version,in DOMString displayName,in unsignedlong estimatedSize,in optional DatabaseCallback creationCallback);
};
WorkerUtils implements WorkerUtilsDatabase;
[Callback=FunctionOnly, NoInterfaceObject]
interface DatabaseCallback {
void handleEvent(in Database database);
};
2,SQLTransaction接口,关注executeSql方法
typedef sequence<any> ObjectArray;
interface SQLTransaction {
void executeSql(in DOMString sqlStatement,in optional ObjectArray arguments,in optional SQLStatementCallback callback,in optional SQLStatementErrorCallback errorCallback);
};
[Callback=FunctionOnly, NoInterfaceObject]
interface SQLStatementCallback {
void handleEvent(in SQLTransaction transaction,in SQLResultSet resultSet);
};
[Callback=FunctionOnly, NoInterfaceObject]
interface SQLStatementErrorCallback {
boolean handleEvent(in SQLTransaction transaction,in SQLError error);
};
3,最后看下SQLResultSetRowList定义
interface SQLResultSetRowList {
readonly attribute unsignedlong length;
getter any item(in unsignedlong index);
};
和SQLResultSet定义
1 interface SQLResultSet {
2 readonly attributelong insertId;
3 readonly attributelong rowsAffected;
4 readonly attribute SQLResultSetRowList rows;
5 };


猜你喜欢
- 如下所示:import urllib,json,requestsurl = 'http://127.0.0.1:8000/accou
- 引言本文将深入探讨Python语言中的核心概念:类(Class)和对象(Object)。我们将介绍这些基本概念,然后通过示例代码详细展示Py
- 以下核心代码参考黑客帝国的界面的雨滴图和网友的爱心素材一 音乐播放def alarm(): # 初始化模 &nbs
- 一、日志级别1. 级别定义logging模块提供了5种日志级别,分别为:CRITICAL>ERROR>WARNING>IN
- asp之家注:本篇asp留言本教程可以说是我见过的最详细,写的最认真的,最适合初学者来学习asp的一篇教程。在此感谢作者hemooday。可
- 创建类from django.forms import ModelFormfrom django.forms import widgets
- 引言:关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂。偶尔发现了这篇文章,总结得很经典,文章流量也
- 本文实例为大家分享了JavaScript实现简单省市联动的具体代码,供大家参考,具体内容如下步骤* 创建一个页面,有两个下拉选择框 
- 芬兰数学家因卡拉花费3个月时间设计出的世界上迄今难度最大的数独。数独是 9 横 9 竖共有 81 个格子,同时又分为 9 个九宫格。规则很简
- MySQLTuner 下载地址:http://github.com/rackerhacker/MySQLTuner-perlMySQLTun
- 大家好!我是 Sergey Kamardin,是 Mail.Ru 的一名工程师。本文主要介绍如何使用 Go 开发高负载的 WebSocket
- 1.虚拟环境它是一个虚拟化的概念,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机来把一部分内容独立出来,我们把这部分独立出来的
- golang 原生 http 库已经可以很方便地实现一个 http server 了,但对于复杂的 web 服务来说,路由解析,请求参数解析
- 今天研究了点Flex技术,做了一个小的Demo,在测试时发现经常报错,网上一查发现是浏览器Flash Player版本较低造成(需要10及其
- 前言问题需求:拥有两个文件夹,一个保存图片image,一个保存标签文件,要求把标签文件中的标注提取出来,并在图片中画出来相应的思路首先提出各
- 使用jQuery的.post提交,并期望得到多个数据,Python后台要使用json格式。不指定datatype为json,让jquery自
- 背景开发项目时应学会站在巨人的肩膀上,即有效利用开发组件进行或工具提升自己的研发效率对于较简单的单体函数而言,只需要依赖原生的SDK即可完成
- 字符串 -- 不可改变的序列如同大多数高级编程语言一样,变长字符串是 Python 中的基本类型。Python 在“后台”分配内存以保存字符
- 问题:希望仅仅允许某个指定IP的计算机连接到SQL Server服务器,但不允许其他的客户端进行连接。解决方法如下:你可以直接在防火墙中做限
- SQL Server管理,你做得好吗?下文这些可能会对你的工作有一些帮助,不妨耐心的看看吧。1. 数据库文件有.mdf .ndf .ldf三