中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

深入淺析JavaScript中數據共享和數據傳遞
來源:易賢網 閱讀:1270 次 日期:2016-07-06 15:34:33
溫馨提示:易賢網小編為您整理了“深入淺析JavaScript中數據共享和數據傳遞”,方便廣大網友查閱!

這篇文章主要介紹了深入淺析JavaScript中數據共享和數據傳遞的相關資料,需要的朋友可以參考下

數據共享和數據傳遞是相輔相成的,我們一起來討論這個問題。首先要說的是共享和傳遞都是有作用域的。作用域就是起作用的區域,在同一個作用域數據可以共享,超過這個作用域就是跨作用域,就得用到數據傳遞了。

作用域

1.ui作用域

每一個ui文件缺省都有對應的ui.js。他們作為一個閉合的作用域。ui.js里根據ui文件里組件的id來獲取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作用域,page作用域包含多個ui作用域。

內存共享

相對文件和數據庫,內存操作的速度快很多,適合于比較少的數據量操作。缺點就是app關閉后就釋放了。deviceone通過以下幾種方式來共享內存。

1. do_Global的memory操作(app作用域)

這個是app作用域的數據分享。這一塊內存其實就是一個鍵值對,一個key對應一個value,所以要注意如果對一個key重新賦值,就會把以前的value覆蓋。使用方法很簡單。參考以下的示例,讀和寫分別在不同的page。

//在index.ui.js里設置值,可以設置為任何json對象,函數對象例外。

global.setMemory("key1", 1);

global.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");

content.key3_2 = global.getMemory("key3")[1];

content.key4_k3 = global.getMemory("key4")["k3"];

label.text = JSON.stringify(content, null, 2);// 格式化

2. Javascript的全局變量(page作用域)

利用JavaScript自身的特性定義全局變量,通??梢远x全局變量來實現同一page下不同ui文件里的數據分享。參考以下的示例,讀和寫分別在不同的ui文件,但是是在一個page作用域。使用也非常簡單,有二種方式:

雖然很方便,但并不推薦使用,因為使用太隨意,如果是協作開發或復雜的項目,如果碰見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.key2["k3"];

3. Javascript的變量(ui作用域)

這個不用太多解釋,就是正常的js變量定義,只能在當前ui.js作用域有效。

var key1 = "value1";

4. sqlite的內存模式

sqlite通常是文件模式,有一種特殊的情況可以直接在內存里使用sqlite,適用于數據結構比較復雜,文本操作麻煩的方式,利用sql語句操作會靈活得多。

內存模式只能有一個,名字固定為\:memory\:.

在后面sqlite數據庫介紹的地方再詳細介紹。

文件共享

這個大家很好理解,文件共享是app作用域的,而且app重啟后也可以訪問??梢酝ㄟ^do_Storage組件在app的任何地方把內容寫入一個文件,然后在另外一個地方讀一個文件把內容讀出來。參考以下的示例,讀和寫分別在不同的page。這里要注意的是文件讀寫通常是異步的,你得確保內容已經寫完了,然后才能讀.

// 在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) {

// 回調到這里才真正把內容寫完,如果在執行到這里之前去讀文件有可能讀不到數據

})

// 在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組件訪問數據庫數據

這個組件是一個MM組件,意味著可以創建多個實例。所有MM組件都缺省是page作用域,也可以是app作用域。創建MM組件第三個參數標示作用域。

這里要注意的是SQLite讀寫通常是異步的,你得確保內容已經寫完了,然后才能讀

1. app作用域:

// 創建一個app作用域的sqlite對象,第二個參數是這個對象的標示,第三個參數標示作用域是app

var sqlite_app = mm("do_SQLite", "sqlite_app_id1", "app")

function test_sqlite() {

// 在index.ui.js里利用這個對象創建一個數據庫test.db

sqlite_app.open("data://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(sname,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!")

})

// 根據"sqlite_app_id1"這個id獲取一個app作用域的sqlite對象,第二個參數是這個對象的標示,第三個參數標示作用域是app

var 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 = "在sqlite/index.ui.js里利用這個對象查詢test.db里的stu_table表的第二條數據\n"

+ JSON.stringify(result[1], null, 2);

2. page作用域:

// 創建一個page作用域的sqlite對象,唯一的id標示是memory_db_id1

var 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.executeSync(stu_table);

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(sname,snumber) values('laoming','1');"

+ "insert into stu_table(sname,snumber) values('laohong','2');"

+ "insert into stu_table(sname,snumber) values('laoliu','3')";

// 同步執行一個SQL語句

sqlite_app.executeSync(stu_sql);

// 在test2.ui.js里查詢在test1.ui.js里創建的數據庫表

// 根據memory_db_id1這個標示來獲取已經創建好的sqlite對象

var sqlite_app = mm("do_SQLite", "memory_db_id1", "page");

// 創建查詢SQL語句

var stu_query = "select * from stu_table";

// 同步執行一個查詢語句

var result = sqlite_app.querySync(stu_query);

label.text = "在test2.ui.js里查詢在test1.ui.js里創建的內存數據庫表的第三條記錄\n"

+ JSON.stringify(result[2], null, 2)

數據傳遞

數據傳遞涉及到跨作用域,比如不同的ui文件傳遞數據,不同的page傳遞數據。

其中最重要也是最常用的方式就是消息機制

1.消息機制

這個環節我們在文檔再里詳細介紹。

總之,消息機制可以在跨ui作用域傳遞數據,也可以跨page作用域傳遞數據。

2.openPage和closePage傳遞數據。

這個數據傳遞是跨page作用域,但是只限于相隔二層page之間。比如在page1的基礎上打開page2,page1把一些數據傳遞給page2;page2關閉自身,露出page1,又可以把數據傳遞回page1. 數據傳遞可以是任何json對象。

這是一個常規而且非常好的方式,建議都這么使用。

// 在index.ui.js里openPage頁面open_close_page/index.ui,傳遞數據

var d = {

"k1" : "v1",

"k2" : "v2",

"k3" : "v3",

"k4" : "v4"

};

app.openPage({

source : "source://view/open_close_page/index.ui",

data : d,

statusBarState : "transparent"

});

}

// 接受頁面open_close_page/index.ui 關閉的時候傳遞回來的數據

page.on("result", function(data) {

if (data)

nf.alert(JSON.stringify(data, null, 2));

})

// 從index.ui.js傳遞過來的數據通過getData獲取值,可直接返回json對象

var data = page.getData();

label.text = "從index.ui.js傳遞過來的數據通過getData獲取值,可直接返回json對象 \n"

+ JSON.stringify(data, null, 2);// 格式化

function close_me() {

// 關閉自身,把數據傳遞回下一層page

app.closePage("我是從open_close_page/index.ui關閉的時候傳遞過來的數據");

}

關于本文給大家介紹的js數據共享和數據傳遞的相關知識就給大家介紹這么多,希望對大家有所幫助!

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美一级网站| 亚洲国产欧美精品| 国产精品海角社区在线观看| 一色屋精品视频在线看 | 久久久久久久久久久一区| 欧美日韩伦理在线免费| 红桃视频一区| 久久久久久**毛片大全| 国产伦精品一区二区三区高清版 | 亚欧成人在线| 欧美激情视频在线播放| 亚洲狼人精品一区二区三区| 蜜臀av国产精品久久久久| 一区在线播放| 欧美成人综合| av成人免费在线| 欧美一区二区三区日韩| 欧美精品三级日韩久久| 国产精品久久97| 亚洲淫性视频| 夜夜嗨av一区二区三区| 亚洲天堂av图片| 国产精品入口麻豆原神| 99re热精品| 精品福利电影| 狠狠色丁香久久综合频道| 午夜精品久久| 国产精品日韩欧美一区| 国产一在线精品一区在线观看| 亚洲开发第一视频在线播放| 亚洲欧美日韩国产成人精品影院| 欧美自拍丝袜亚洲| 久久亚洲精品伦理| 国产精品美女在线| 亚洲欧美综合| 欧美视频在线免费| 亚洲福利专区| 欧美另类综合| 亚洲一区999| 一区二区三区视频在线播放| 亚洲另类视频| 最新国产成人av网站网址麻豆| 韩日精品视频| 精品电影在线观看| 亚洲人成在线观看| 一本色道久久88综合亚洲精品ⅰ| 日韩图片一区| 篠田优中文在线播放第一区| 欧美一级播放| 欧美jizzhd精品欧美巨大免费| 欧美激情精品久久久久久| 欧美色123| 黄色欧美成人| 久久精品国产久精国产一老狼| 欧美一级视频精品观看| 国产综合色产| 欧美精品日韩| 欧美一区二区三区视频免费| 国产精品国产三级国产aⅴ入口| 亚洲国产精品va在线看黑人动漫| 免费观看成人| 亚洲视屏一区| 亚洲免费激情| 亚洲高清免费| 国产在线国偷精品产拍免费yy| 欧美屁股在线| 美日韩免费视频| 国产精品夜夜夜| 夜夜嗨一区二区三区| 国产午夜久久| 欧美午夜在线观看| 久久久久久久综合色一本| 国内精品久久久久久久影视麻豆| 欧美黄色影院| 亚洲精品四区| 国产亚洲精久久久久久| 欧美视频日韩| 国产欧美 在线欧美| 欧美日韩国产小视频在线观看| 欧美三级免费| 国产精品成人一区二区三区夜夜夜| 欧美在线播放一区二区| 久久美女艺术照精彩视频福利播放| 国产精品国产三级国产专区53 | 国产日韩欧美夫妻视频在线观看| 亚洲一区二区影院| 国产精品日日摸夜夜添夜夜av| 一区二区三区欧美激情| 欧美午夜一区二区| 亚洲欧美日本国产有色| 韩国三级电影久久久久久| 久久久欧美精品| 亚洲精品小视频在线观看| 欧美系列亚洲系列| 欧美一区高清| 亚洲日韩第九十九页| 国产精品久久网| 麻豆freexxxx性91精品| 亚洲图片欧洲图片日韩av| 国产亚洲一区二区在线观看| 欧美国产日韩一区二区在线观看 | 国产精品国产福利国产秒拍 | 国产综合在线看| 欧美高清在线视频| 欧美诱惑福利视频| 日韩视频在线免费观看| 国色天香一区二区| 国产精品久久久久av免费| 老妇喷水一区二区三区| 欧美成人免费一级人片100| 国产精品一二| 欧美精品一区三区| 久久久夜精品| 欧美亚洲一区二区在线观看| 亚洲电影第1页| 国产亚洲毛片在线| 欧美日韩在线视频一区二区| 欧美成人在线影院| 免费观看久久久4p| 久久久亚洲欧洲日产国码αv| 亚洲欧美国产精品va在线观看 | 狠狠网亚洲精品| 国产精品夜夜夜| 欧美性事在线| 欧美丝袜一区二区| 国产精品v欧美精品v日韩| 欧美精品电影| 欧美日韩99| 国产精品久久久对白| 欧美视频在线一区二区三区| 欧美激情亚洲视频| 欧美日韩性生活视频| 欧美色综合天天久久综合精品| 欧美日韩一区二区视频在线| 国产精品国产三级国产专区53| 国产精品白丝av嫩草影院| 国产精品热久久久久夜色精品三区| 欧美三区美女| 国产一区二区日韩精品| 一区二区亚洲精品国产| 亚洲精品久久久蜜桃| 亚洲专区在线| 久久久久久久久蜜桃| 欧美不卡在线| 欧美视频在线一区| 国产一区二区三区四区| 亚洲精品久久久久中文字幕欢迎你 | 国产精品老牛| 亚洲成人资源| 夜夜躁日日躁狠狠久久88av| 性xx色xx综合久久久xx| 欧美激情黄色片| 国产亚洲综合在线| 日韩亚洲在线| 免费看亚洲片| 国产精品网站视频| 亚洲免费激情| 久久中文在线| 激情欧美日韩| 久久成人国产| 国产日韩欧美精品综合| 亚洲视频一区| 欧美色视频一区| 夜夜嗨av一区二区三区四区 | 伊人久久综合97精品| 亚洲欧美激情视频| 欧美日本簧片| 亚洲精品久久久久久久久| 久久精品水蜜桃av综合天堂| 国产精品影院在线观看| 亚洲免费视频网站| 国产一区二区高清| 久久久综合视频| 亚洲风情亚aⅴ在线发布| 欧美大片一区| 一本一本久久a久久精品综合妖精| 欧美精品 国产精品| 这里只有精品视频| 国产丝袜一区二区三区| 久久综合伊人| 一区二区三区 在线观看视| 国产精品高精视频免费| 久久精品夜色噜噜亚洲aⅴ| 亚洲国产欧美一区二区三区同亚洲| 毛片精品免费在线观看| 日韩一级网站| 国产麻豆日韩| 欧美国产欧美综合 | 国产一区二区成人| 欧美另类视频在线| 亚洲伊人色欲综合网| 精品1区2区3区4区| 欧美人与禽猛交乱配| 亚洲欧美日韩国产中文| 亚洲高清在线观看| 国产亚洲成av人片在线观看桃| 你懂的视频一区二区| 欧美一级理论片| 一本色道久久综合狠狠躁篇的优点| 国产午夜精品福利|