Posted in javascript @ 2012.04.11 (周三) 2:23 下午 by 一兮
复制数据很简单。
var a = jsonobj;
简单的就将jsonobj的值复制到了变量a中,但如果jsonobj是个json数据的话,你会发现修改a的值时,jsonobj也会跟着改变。
如果你对javascript中的prototype那套机制比较了解的话可能就会大概明白是怎么回事,是的,因为json其实也是个object,所以var a = jsonobj 赋值时,中间有个原型链会将两个关联起来。
要达到想要的复制数据也很简单:
var a = JSON.parse(JSON.stringify(jsonobj));
将json序列化为string再还原成json,因为中间产生了新的对象,所以两者不再关联。
这种写法看起来很不科学,但应该是比较好的办法了。
Tags:JSON 167 views With
Posted in HTML5 @ 2012.03.08 (周四) 10:59 上午 by 一兮
W3c在去年12月6日时对indexdb的草案做了一些修改,虽然变动不是很大,但是却直接使得以前的代码不能正常work,主要在数据库创建的部分。
目前firefox10以后以及ie10(windows8 Consumer Preview)支持此标准,chrome未测,未知,但未来应该都会遵循这个标准。
具体的可以参考w3c的官方文档,地址在这里 :http://www.w3.org/TR/IndexedDB/
在网上查找关于indexdb的教程的也需注意查看时间,如果是针对firefox10之前的代码或者12月6日前的代码在最新的浏览器上是不能正常work的。
写这篇文章本来是要填之前在那边win8的文章里说IE10里面indexdb bug那个坑的。后来重构的时候,发现这并不是BUG,是遵循的标准程度不一样的原因。而伴随着前几天windows8 consumer preview新出来的IE10已经遵循最新的indexdb标准,所以代码已经和firefox一样,所以这里不再理会那个所谓的bug.这里重点讲下新的数据库声明方式(这是变动部分),而是用indexdb的方法并没有变动。
比较大的一个变动部分是废弃了以前的 setVersion()方法,所以导致我们在创建数据库和createObjectStore的流程有一些变动,而且多了一些新的回调方法。
首先是创建数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| var DB={};
window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; //各浏览器的各自的私有方法,这个不多说了;
DB.openDatabase(function(){
console.log('Database open'); //数据库初始化完成后我们回到这里。
});
DB.openDatabase = function(callback) {
var request = indexedDB.open('quicknote',1); //注意区别以前的方法,这里第二个参数不再是description,而是数据库版本号
request.onsuccess = function(e) { //数据库打开成功回调
DB.db = e.target.result; //我们用DB.db来存放indexdb
callback();
};
request.onupgradeneeded = function(e){ //第一次打开数据库或数据库升级时会触发,完成后根据情况触发success或者error
DB.db = e.target.result;
var db = DB.db;
if(!DB.db.objectStoreNames.contains('notes')){ //createObjectStore,以前需要在setVersion时才能执行。
/* create object store*/
db.createObjectStore('notes', {keyPath:'id', autoIncrement:true})
.createIndex('updated', 'updated', { unique: false });
}
};
request.onerror = function(e){ //数据库打开错误回调
console.log(e);
}
} |
上面就是新的indexdb的数据库初始化方式,相对以前的来说,代码简化了不少,也不用人为的判断数据库版本号了。
Tags:HTML5 indexdb 315 views With
Posted in 工作记录 @ 2012.02.28 (周二) 9:47 下午 by 一兮
家里遇到一些事,很是烦恼。
却又无能为力。
感觉自己帮不上什么忙又是很无助。
我需要一些法律援助,有谁能推荐吗?
276 views With
Posted in javascript, win8, 工作记录 @ 2012.01.10 (周二) 12:16 上午 by 一兮
随着US时间1月8号M$第一波参赛程序的提交截止,Quick Note for Win8的开发也算是告一段落,中间因为一些各种准备不充分问题,虽然这次提交的版本还没达到最完美的我想要的最完美的状态,但总算顺利的完成任务。
这之间有很多波折,从最早的win8 developer preview发布时,我曾第一时间在我的笔记本上直接硬盘安装win8,大概的了解了metro界面和以前传统desktop的区别,并简单的从visual studio 11 preview中创建了一个split的javascript metro项目,build,整个过程很顺利,简单的浏览了项目文件的组成,当时评估是基于web的APP很好移植,甚至你可以简单的理解成使用javascript build的metro程序其实就是封装了一个全屏的IE10而已(现在开来,这句话理解也确实没有错)。
凭着这个了解,粗略的评估了quick note应该是比较容易移植到win8 metro下,而因为preview中的win8 app store并没有开放,当时得到的消息是今年的2月份开放,所以这事情搁置了一旁,然后投入到另一个项目的开发中。
然后上个月下旬的时候得到一个消息说,M$在5个国家地区(不包括CN)有个第一波提交metro app的评选,将会出现在win8 beta版本的store中预置,这是个绝好的先机,所以迅速将重心转移到这边。
首先要思考的第一个问题是quick note数据的存放问题,因为考虑之前偶尔会有用户抱quick note chrome版本数据丢失的问题,所以这次想找个比较稳妥的数据储存模式,在了解懂啊winRT并没有提供SQL的数据库支持,并在一些第三方的选择比如winrtsql等,最后还是选择了使用html5中的indexdb,第一,这是metro中唯一有文档的数据库级别的储存,第二,之前在firefox中的quick note也是使用indexdb储存,移植应该会很顺利。
然后是文件的迁移,并解决一些列bug,以及一些IE10的兼容问题,以及一些metro app的一些特殊兼容问题,比如不允许直接使用innerHTML之类的方法(当然也包括jquery的.html()方法),debug,竟然出奇的顺利,两天时间就能把chrome的quick note移植到win8中,并还有和diigo的云同步功能。
事情转变在某天晚上看了win8 build大会的视频后,重新认识了metro UI的设计。
因比赛的评分使用metro UI的分值比重是50%,看了视频后,直接推翻直接准备在基于split view的模板上重新设计quick note。
和UI nancy简单的讨论后,然后开始迅速的搭建HTML结构原型。
并尽量的去使用metro winJS中提供的UI,比如app bar ,setting ,listview之类的东西。
后来又添加上了系统层的share,search之类的东西。
因为时间问题,中间取舍了很多,最后提交的版本中,里面有个indexdb的小bug也未来得及解决,只是用了一些hack的办法去处理(关于什么bug,和firefox中indexdb的区别,我后面会专门开文章介绍)。
虽然赶在了截止之前提交了程序,但是是否能入围,只能祈祷。我自己做出来的东西,我只能打70分,如果给我更充裕的时间,我能研究透win8的API,应该能把quick note做的更完善。
祈祷能入围吧。

Tags:CSS javascript metro win8 423 views With
Posted in javascript @ 2011.10.27 (周四) 5:19 下午 by 一兮
在javascript中,二进制流一般是一个[object ArrayBuffer]的对象,一般的javascript方法是没法处理这个object的。
要处理它,我们需要用Uint8Array将它转换成一个8位的整形数组。
当然,如果你需要,你还能将它还原成string
1
2
3
4
5
6
7
8
| // t is a arraybuffer
var uInt8Array = new Uint8Array(t);
//转换为二进制数组 例如 var byte3 = uInt8Array[4]
for(i=0;i<uInt8Array.length;i++){
d+=String.fromCharCode(uInt8Array[i])
} |
Tags:HTML5 二进制 615 views With