การแบ่งปันข้อมูลและการส่งข้อมูลช่วยเสริมซึ่งกันและกันให้หารือเกี่ยวกับปัญหานี้ร่วมกัน สิ่งแรกที่จะพูดคือการแบ่งปันและการผ่านนั้นมีการกำหนดขอบเขต ขอบเขตคือพื้นที่ที่ใช้งานได้ ข้อมูลสามารถแบ่งปันในขอบเขตเดียวกัน หากคุณเกินขอบเขตนี้จะต้องใช้ขอบเขตข้ามและต้องใช้การส่งข้อมูล
ขอบเขต
1. ขอบเขต UI
แต่ละไฟล์ UI มี UI.JS ที่สอดคล้องกันโดยค่าเริ่มต้น พวกเขาทำหน้าที่เป็นขอบเขตปิด ui.js ได้รับวัตถุ UI ตาม ID ของส่วนประกอบในไฟล์ UI; ไฟล์ UI ที่แตกต่างกันสามารถกำหนดส่วนประกอบด้วย ID เดียวกัน ตัวแปรที่กำหนดไว้ใน UI.JS สามารถเข้าถึงได้ใน JS นี้เท่านั้น
2. ขอบเขตหน้า
ทุกครั้งที่คุณโทรหา OpenPage หน้าใหม่จะเปิดขึ้นและหน้าใหม่นี้จะครอบคลุมในหน้าเก่า เมื่อ ClosePage ปิดตัวเองหน้าเก่าที่ครอบคลุมจะถูกเปิดเผย นอกเหนือจากไฟล์ UI หลักแต่ละหน้ายังสามารถมีไฟล์ UI อื่น ๆ อีกมากมายซึ่งอยู่ในขอบเขตหน้าเดียวกัน
เมื่อหน้าถูกปิดวัตถุทั้งหมดที่สร้างขึ้นในหน้าจะถูกปล่อยออกมา
3. แอพขอบเขต
นี่คือขอบเขตที่ใหญ่ที่สุด ตราบใดที่แอปไม่ออกขอบเขตนี้จะถูกต้องเสมอ
app.js เป็นของขอบเขตแอพเพราะไม่ได้อยู่ในหน้าใด ๆ
ในระยะสั้นขอบเขตแอปมีหลายขอบเขตหน้าและขอบเขตหน้ามีขอบเขต UI หลายตัว
การแชร์หน่วยความจำ
เมื่อเทียบกับไฟล์และฐานข้อมูลการดำเนินการหน่วยความจำนั้นเร็วกว่ามากและเหมาะสำหรับการดำเนินการข้อมูลที่ค่อนข้างเล็ก ข้อเสียคือแอปถูกปล่อยออกมาหลังจากปิด DeviceOne แชร์หน่วยความจำด้วยวิธีต่อไปนี้
1. การทำงานของหน่วยความจำของ Do_Global (ขอบเขตแอพ)
นี่คือการแบ่งปันข้อมูลในขอบเขตแอพ หน่วยความจำชิ้นนี้เป็นคู่คีย์-ค่าและคีย์สอดคล้องกับค่าดังนั้นโปรดระวังว่าหากมีการกำหนดคีย์ใหม่ค่าก่อนหน้าจะถูกเขียนทับ วิธีการใช้งานง่ายมาก อ้างถึงตัวอย่างต่อไปนี้อ่านและเขียนในหน้าต่างๆตามลำดับ
// ตั้งค่าใน index.ui.js ซึ่งสามารถตั้งค่าเป็นวัตถุ JSON ใด ๆ พร้อมข้อยกเว้นวัตถุฟังก์ชั่น global.setMemory ("key1", 1); global.setMemory ("key2", "value1"); Global.setMemory ("Key3", ["A", "B", "C"]); Global.SetMemory ("Key4", {"K1": "V1" var label = ui ("do_label_2"); // รับค่าในหน่วยความจำ/index.ui.js คุณสามารถส่งคืนวัตถุ JSON var global = sm ("do_global") โดยตรงเนื้อหา = {}; content.key1 = global.getMemory ("key1"); global.getMemory ("key3") [1]; content.key4_k3 = global.getMemory ("key4") ["k3"]; label.text = json.stringify (เนื้อหา, null, 2); // รูปแบบ2. ตัวแปรโกลบอล JavaScript (ขอบเขตหน้า)
ใช้คุณสมบัติของ JavaScript เพื่อกำหนดตัวแปรทั่วโลก โดยปกติคุณสามารถกำหนดตัวแปรส่วนกลางเพื่อรับรู้การแบ่งปันข้อมูลในไฟล์ UI ที่แตกต่างกันภายใต้หน้าเดียวกัน อ้างถึงตัวอย่างต่อไปนี้อ่านและเขียนในไฟล์ UI ที่แตกต่างกัน แต่อยู่ในขอบเขตหน้า นอกจากนี้ยังใช้งานง่ายมากมีสองวิธีในการ:
แม้ว่าจะสะดวกมาก แต่ก็ไม่แนะนำให้ใช้เพราะมันเป็นกันเองเกินไป หากเป็นการพัฒนาความร่วมมือหรือโครงการที่ซับซ้อนมันเป็นเรื่องยากที่จะค้นหาและดีบักหากมีข้อผิดพลาด
// ตั้งค่าตัวแปรทั่วโลกของ JS ใน test1.ui.js สองวิธี // 1. อย่าเพิ่มคำจำกัดความตัวแปรคำนำหน้า VAR, key1 = "value1"; // 2. กำหนดตัวแปรส่วนกลางบนอุปกรณ์ deviceone deviceone.key2 = {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4" 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 จะมีความยืดหยุ่นมากขึ้น
สามารถมีโหมดหน่วยความจำเดียวเท่านั้นและชื่อได้รับการแก้ไขเป็น /: หน่วยความจำ /:
ในคำอธิบายต่อไปนี้ของฐานข้อมูล SQLite เราจะแนะนำรายละเอียด
การแชร์ไฟล์
ทุกคนเข้าใจง่าย การแชร์ไฟล์อยู่ในขอบเขตของแอพและยังสามารถเข้าถึงได้หลังจากที่แอปเริ่มต้นใหม่ คุณสามารถเขียนเนื้อหาไปยังไฟล์ได้ทุกที่ในแอพผ่านส่วนประกอบ DO_STORAGE จากนั้นอ่านไฟล์จากที่อื่นเพื่ออ่านเนื้อหา อ้างถึงตัวอย่างต่อไปนี้อ่านและเขียนในหน้าต่างๆตามลำดับ สิ่งที่คุณต้องทราบที่นี่คือการอ่านและเขียนไฟล์มักจะเป็นแบบอะซิงโครนัสและคุณต้องตรวจสอบให้แน่ใจว่าเนื้อหาถูกเขียนก่อนที่คุณจะสามารถอ่านได้
// เขียนไฟล์ file1 และ file2 ใน index.ui.js คุณสามารถเขียนวัตถุ JSON ได้โดยตรง var key1 = "value1"; storage.writefile ("data: // file1", key1, ฟังก์ชั่น (data, e) {// การเรียกกลับเท่านั้นที่นี่เพื่อเขียนเนื้อหา : "v2", "k3": "v3", "k4": "v4"}; storage.writefile ("data: // file2", key2, ฟังก์ชั่น (ข้อมูล, e) {// การโทรกลับจะจบลงที่นี่ datacache = sm ("do_datacache"); var content = {}; content.key1 = datacache.loaddata ("key1"); content.key2_3 = datacache.loaddata ("key2") ["k3"]; label.text = "datacache/index.ui.js รูปแบบส่วนประกอบ DO_SQLITE เข้าถึงข้อมูลฐานข้อมูล
ส่วนประกอบนี้เป็นองค์ประกอบ MM ซึ่งหมายความว่าสามารถสร้างหลายอินสแตนซ์ได้ ส่วนประกอบ MM ทั้งหมดเป็นขอบเขตหน้าตามค่าเริ่มต้นหรือขอบเขตแอพ สร้างขอบเขตการทำเครื่องหมายพารามิเตอร์ที่สามของส่วนประกอบ MM
ควรสังเกตที่นี่ว่าการอ่านและการเขียน SQLite มักจะเป็นแบบอะซิงโครนัสคุณต้องตรวจสอบให้แน่ใจว่าเนื้อหาถูกเขียนก่อนที่คุณจะอ่านได้
1. ขอบเขตแอพ:
// สร้างวัตถุ SQLITE แอพพลิเคชั่น พารามิเตอร์ที่สองคือฉลากของวัตถุนี้ พารามิเตอร์ที่สามทำเครื่องหมายขอบเขตคือ appvar sqlite_app = mm ("do_sqlite", "sqlite_app_id1", "แอป") ฟังก์ชั่น test_sqlite () {// ใช้วัตถุนี้เพื่อสร้างฐานข้อมูล test.dbsqlite_app.open ("//test.db"); เรียกใช้คำสั่ง SQL SQLITE_APP.EXECUTESYNC (stu_Table); // สร้างตารางคำสั่ง SQL SQL STU_TABLE = "สร้างตาราง STU_TABLE (_ID จำนวนเต็ม); // สร้างตารางคำสั่ง SQL STU_TABLE =" สร้างตาราง stu_Table (_id Integer); คีย์หลัก autoincrement, ข้อความ Sname, snumber text) "; // synchronously เรียกใช้คำสั่ง sql sqlite_app.executesync (stu_table); var stu_sql =" แทรกลงใน stu_table (snumber, snumber) ค่า ('xiaoming', '01005'); ค่า ('xiaoliu', '01007') "; // ดำเนินการคำสั่ง sql แบบอะซิงโครนัส sqlite_app.execute (stu_sql, ฟังก์ชั่น (ข้อมูล, e) {// การเรียกกลับมาที่นี่เท่านั้น รับวัตถุ SQLITE ของแอพพลิเคชั่นตาม ID "SQLITE_APP_ID1" และพารามิเตอร์ที่สองคือฉลากของวัตถุนี้ เปิดฐานข้อมูลไม่จำเป็นต้องเปิดอีกต่อไป // สร้างคำสั่ง SQL แบบสอบถาม var stu_query = "เลือก * จาก stu_table"; // ดำเนินการคำสั่งค้นหาแบบซิงโครนัส var results = sqlite_app.querysync (stu_query) test.db/n "+ json.stringify (ผลลัพธ์ [1], null, 2);2. ขอบเขตหน้า:
// สร้างวัตถุ SQLite หน้าปิดฉลาก ID เท่านั้นคือ memory_db_id1var sqlite_app = mm ("do_sqlite", "memory_db_id1", "page"); // ใช้วัตถุนี้เพื่อสร้างฐานข้อมูลหน่วยความจำใน test1.ui.js ชื่อนี้จะต้องเขียนเป็น: หน่วยความจำ: sqlite_app.open (":"); // สร้างตารางคำสั่ง sql var stu_table = "ตารางวางถ้ามีอยู่ stu_table;" // ความเร็วในการดำเนินการฐานข้อมูลหน่วยความจำนั้นรวดเร็ว stu_table (_id จำนวนเต็มคีย์หลักอัตโนมัติ autoincrement, ข้อความ Sname, snumber text) "; // synchronously เรียกใช้คำสั่ง sql sqlite_app.executesync (stu_table); var stu_sql =" แทรกลงใน stu_table (sname, snumber) ค่า ('laohong', '2'); "+" แทรกลงใน stu_table (sname, snumber) ค่า ('laoliu', '3') "; // synchronously เรียกใช้คำสั่ง sql sqlite_app.executesync (stu_sql); // สอบถามตารางฐานข้อมูลที่สร้างขึ้นใน test1.ui.js ใน test2.ui.js // รับวัตถุ SQLite ที่สร้างขึ้น var sqlite_app = mm ("do_sqlite", "memory_db_id1", "หน้า"); // สร้างคำสั่ง sql query var stu_query = "เลือก * จาก stu_table"; // เรียกใช้คำสั่ง query var results = sqlite_app.querysync (stu_query); label.text = "การสืบค้นบันทึกที่สามของตารางฐานข้อมูลการส่งข้อมูล
การส่งข้อมูลเกี่ยวข้องกับขอบเขตข้ามเช่นการส่งข้อมูลในไฟล์ UI ที่แตกต่างกันและส่งข้อมูลในหน้าต่างๆ
วิธีที่สำคัญที่สุดและใช้กันมากที่สุดคือกลไกข้อความ
1. กลไกข้อความ
เราจะแนะนำลิงค์นี้โดยละเอียดในเอกสาร
ในระยะสั้นกลไกข้อความสามารถส่งผ่านข้อมูลข้ามขอบเขต UI หรือข้ามขอบเขตหน้า
2. OpenPage และ ClosePage Pass ข้อมูล
การถ่ายโอนข้อมูลนี้เป็นขอบเขตข้ามหน้า แต่ถูก จำกัด ไว้ที่หน้าสองชั้น ตัวอย่างเช่นหากคุณเปิดหน้า 2 ในหน้า 1 หน้า 1 จะส่งข้อมูลบางส่วนไปยังหน้า 2 Page2 ปิดตัวเองเปิดเผยหน้า 1 และส่งผ่านข้อมูลกลับไปที่หน้า 1 การถ่ายโอนข้อมูลสามารถเป็นวัตถุ JSON ใด ๆ
นี่เป็นวิธีปกติและดีมากและขอแนะนำให้ใช้เช่นนี้
// ใน index.ui.js, ส่งข้อมูล var d = {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"}; app.openpage ({แหล่งที่มา: ยอมรับข้อมูลที่ส่งผ่านเมื่อหน้า open_close_page/index.ui ถูกปิด page.on ("ผลลัพธ์", ฟังก์ชั่น (ข้อมูล) {if (data) nf.alert (json.stringify (ข้อมูล, null, 2));}) // ข้อมูลที่ส่งผ่านจาก index.ui.js สามารถรับค่าผ่าน getData โดยตรง วัตถุ JSON/n "+ json.stringify (data, null, 2); // format function close_me () {// ปิดตัวเองและส่งข้อมูลกลับไปที่เลเยอร์ถัดไปของ pageapp.closepage (" ฉันผ่านข้อมูลเมื่อ open_close_page/index.ui ปิด ");};};ฉันจะแนะนำมากมายเกี่ยวกับความรู้ที่เกี่ยวข้องเกี่ยวกับการแบ่งปันข้อมูล JS และการส่งข้อมูลที่บทความนี้แนะนำให้คุณทราบ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!