深入浅析javascript中数据共享和数据传递

上传人:bin****86 文档编号:59392413 上传时间:2018-11-07 格式:DOCX 页数:12 大小:19.64KB
返回 下载 相关 举报
深入浅析javascript中数据共享和数据传递_第1页
第1页 / 共12页
深入浅析javascript中数据共享和数据传递_第2页
第2页 / 共12页
深入浅析javascript中数据共享和数据传递_第3页
第3页 / 共12页
深入浅析javascript中数据共享和数据传递_第4页
第4页 / 共12页
深入浅析javascript中数据共享和数据传递_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《深入浅析javascript中数据共享和数据传递》由会员分享,可在线阅读,更多相关《深入浅析javascript中数据共享和数据传递(12页珍藏版)》请在金锄头文库上搜索。

1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解深入浅析JavaScript中数据共享和数据传递这篇文章主要介绍了深入浅析JavaScript中数据共享和数据传递的相关资料,需要的朋友可以参考下数据共享和数据传递是相辅相成的,我们一起来讨论这个问题。首先要说的是共享和传递都是有作用域的。作用域就是起作用的区域,在同一个作用域数据可以共享,超过这个作用域就是跨作用域,就得用到数据传递了。作用域1.ui作用域每一个ui文件缺省都有对应的ui.js。他们作为一个闭合的作用域。ui.js里根据ui文件里组件的i

2、d来获取ui对象;不同的ui文件可以定义相同id的组件。在ui.js里定义的变量只能在这个js里访问。2.page作用域每次调用openPage都会打开一个新的page,这个新的page会盖在旧的page之上,closePage关闭自己后就会露出被盖住的旧的page。每一个page里除了主ui文件以外,还可以包含其它很多ui文件,这些ui文件在同一个page作用域。当page关闭的时候,所有在page里构建的对象都会释放。3.app作用域这个是最大的作用域,只要app没有退出,这个作用域就一直有效。app.js属于app作用域,因为它不属于任何page。总之,app作用域包含多个page作用域

3、,page作用域包含多个ui作用域。内存共享相对文件和数据库,内存操作的速度快很多,适合于比较少的数据量操作。缺点就是app关闭后就释放了。deviceone通过以下几种方式来共享内存。1. do_Global的memory操作(app作用域)这个是app作用域的数据分享。这一块内存其实就是一个键值对,一个key对应一个value,所以要注意如果对一个key重新赋值,就会把以前的value覆盖。使用方法很简单。参考以下的示例,读和写分别在不同的page。/在index.ui.js里设置值,可以设置为任何json对象,函数对象例外。global.setMemory(key1, 1);global

4、.setMemory(key2, value1);global.setMemory(key3, a, b, c );global.setMemory(key4, k1 : v1,k2 : v2,k3 : v3,k4 : v4);var label = ui(do_Label_2);/ 在memory/index.ui.js里获取值,可直接返回json对象var global = sm(do_Global);var content = ;content.key1 = global.getMemory(key1);content.key2 = global.getMemory(key2);cont

5、ent.key3_2 = global.getMemory(key3)1;content.key4_k3 = global.getMemory(key4)k3;label.text = JSON.stringify(content, null, 2);/ 格式化2. Javascript的全局变量(page作用域)利用JavaScript自身的特性定义全局变量,通常可以定义全局变量来实现同一page下不同ui文件里的数据分享。参考以下的示例,读和写分别在不同的ui文件,但是是在一个page作用域。使用也非常简单,有二种方式:虽然很方便,但并不推荐使用,因为使用太随意,如果是协作开发或复杂的项目

6、,如果碰见bug,很难定位和调试。/ 在test1.ui.js里设置js的全局变量,二种方式。/ 1.不要加var前缀的变量定义,key1 = value1;/ 2. 把全局变量定义在deviceone对象上deviceone.key2 = k1 : v1,k2 : v2,k3 : v3,k4 : v4/ 在test2.ui.js里获取test1.ui.js里定义的全局变量,二种方式。var content = ;content.key1 = key1;content.key2_k3 = deviceone.key2k3;3. Javascript的变量(ui作用域)这个不用太多解释,就是正常

7、的js变量定义,只能在当前ui.js作用域有效。var key1 = value1;4. sqlite的内存模式sqlite通常是文件模式,有一种特殊的情况可以直接在内存里使用sqlite,适用于数据结构比较复杂,文本操作麻烦的方式,利用sql语句操作会灵活得多。内存模式只能有一个,名字固定为:memory:.在后面sqlite数据库介绍的地方再详细介绍。文件共享这个大家很好理解,文件共享是app作用域的,而且app重启后也可以访问。可以通过do_Storage组件在app的任何地方把内容写入一个文件,然后在另外一个地方读一个文件把内容读出来。参考以下的示例,读和写分别在不同的page。这里要

8、注意的是文件读写通常是异步的,你得确保内容已经写完了,然后才能读./ 在index.ui.js里写文件file1和file2,可以直接写json对象var key1 = value1;storage.writeFile(data:/file1, key1, function(data, e) / 回调到这里才真正把内容写完,如果在执行到这里之前去读文件有可能读不到数据)var key2 = k1 : v1,k2 : v2,k3 : v3,k4 : v4;storage.writeFile(data:/file2, key2, function(data, e) / 回调到这里才真正把内容写完,

9、如果在执行到这里之前去读文件有可能读不到数据)/ 在datacache/index.ui.js里获取值,可直接返回json对象var datacache = sm(do_DataCache);var content = ;content.key1 = datacache.loadData(key1);content.key2_3 = datacache.loadData(key2)k3;label.text = datacache/index.ui.js里获取值,可直接返回json对象 n+ JSON.stringify(content, null, 2);/ 格式化do_SQLite组件访问

10、数据库数据这个组件是一个MM组件,意味着可以创建多个实例。所有MM组件都缺省是page作用域,也可以是app作用域。创建MM组件第三个参数标示作用域。这里要注意的是SQLite读写通常是异步的,你得确保内容已经写完了,然后才能读1. app作用域:/ 创建一个app作用域的sqlite对象,第二个参数是这个对象的标示,第三个参数标示作用域是appvar sqlite_app = mm(do_SQLite, sqlite_app_id1, app)function test_sqlite() / 在index.ui.js里利用这个对象创建一个数据库test.dbsqlite_app.open(d

11、ata:/test.db);var stu_table = drop table if exists stu_table/ 同步执行一个SQL语句sqlite_app.executeSync(stu_table);/ 创建表SQL语句stu_table = create table stu_table(_id integer primary key autoincrement,sname text,snumber text);/ 同步执行一个SQL语句sqlite_app.executeSync(stu_table);var stu_sql = insert into stu_table(sn

12、ame,snumber) values(xiaoming,01005);+ insert into stu_table(sname,snumber) values(xiaohong,01006);+ insert into stu_table(sname,snumber) values(xiaoliu,01007);/ 异步执行一个SQL语句sqlite_app.execute(stu_sql, function(data, e) / 回调到这里才真正把数据插入完,如果在执行到这里之前去查询数据有可能读不到数据deviceone.print(insert finished!)/ 根据sqlit

13、e_app_id1这个id获取一个app作用域的sqlite对象,第二个参数是这个对象的标示,第三个参数标示作用域是appvar sqlite_app = mm(do_SQLite, sqlite_app_id1, app)/ 在sqlite/index.ui.js里利用这个对象查询test.db,因为这个对象已经打开了数据库,所以不需要再open了/ 创建查询SQL语句var stu_query = select * from stu_table;/ 同步执行一个查询语句var result = sqlite_app.querySync(stu_query);label.text = 在sq

14、lite/index.ui.js里利用这个对象查询test.db里的stu_table表的第二条数据n+ JSON.stringify(result1, null, 2);2. page作用域:/ 创建一个page作用域的sqlite对象,唯一的id标示是memory_db_id1var sqlite_app = mm(do_SQLite, memory_db_id1, page);/ 在test1.ui.js里利用这个对象创建一个内存数据库,这个名字必须写死是:memory:sqlite_app.open(:memory:);/ 创建表SQL语句var stu_table = drop table if exists stu_table;/ 内存数据库执行速度快,可以尝试都用同步/ 同步执行一个SQL语句sqlite_app.execute

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号