تكمل مشاركة البيانات وتسليم البيانات بعضها البعض ، دعنا نناقش هذه المشكلة معًا. أول شيء يقوله هو أن المشاركة والمرور كلاهما محددان. النطاق هو المنطقة التي تعمل فيها. يمكن مشاركة البيانات في نفس النطاق. إذا تجاوزت هذا النطاق ، فسيتم استخدامه ، ويجب استخدام نقل البيانات.
نِطَاق
1.UI النطاق
يحتوي كل ملف واجهة المستخدم على ui.js المقابلة بشكل افتراضي. أنها بمثابة نطاق مغلق. يحصل ui.js على كائنات واجهة المستخدم بناءً على معرف المكون في ملف واجهة المستخدم ؛ يمكن لملفات واجهة المستخدم المختلفة تحديد المكونات بنفس المعرف. لا يمكن الوصول إلى المتغيرات المحددة في ui.js إلا في هذا JS.
2. صفحة نطاق
في كل مرة تقوم فيها بالاتصال بـ OpenPage ، سيتم فتح صفحة جديدة ، وسيتم تغطية هذه الصفحة الجديدة على الصفحة القديمة. عندما يغلق ClosePage نفسه ، سيتم كشف الصفحة القديمة المغطاة. بالإضافة إلى ملف واجهة المستخدم الرئيسي ، يمكن أن تحتوي كل صفحة أيضًا على العديد من ملفات واجهة المستخدم الأخرى ، والتي توجد في نفس نطاق الصفحة.
عند إغلاق الصفحة ، سيتم إصدار جميع الكائنات المدمجة في الصفحة.
3. app نطاق
هذا هو أكبر نطاق. طالما أن التطبيق لا يخرج ، سيكون هذا النطاق دائمًا صالحًا.
ينتمي App.js إلى نطاق التطبيق لأنه لا ينتمي إلى أي صفحة.
باختصار ، يحتوي نطاق التطبيق على نطاقات متعددة صفحات ، ويحتوي نطاق الصفحة على عدة نطاقات واجهة المستخدم.
تبادل الذاكرة
بالمقارنة مع الملفات وقواعد البيانات ، فإن عمليات الذاكرة أسرع بكثير وهي مناسبة لعمليات البيانات الصغيرة نسبيًا. العيب هو أن التطبيق يتم إصداره بعد إغلاقه. يشارك 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" ، "k2: var label = ui ("do_label_2") ؛ // احصل على القيمة في الذاكرة/index.ui.js ، يمكنك إرجاع كائن JSON بشكل مباشر var global = sm ("do_global") ؛ var content = {} ؛ content.key1 = global.getMemory ("key1") global.getMemory ("key3") [1] ؛ content.key4_k3 = global.getMemory ("key4") ["k3"]2. جافا سكريبت العالمية (نطاق الصفحة)
استخدم خصائص JavaScript الخاصة لتحديد المتغيرات العالمية. يمكنك عادة تحديد المتغيرات العالمية لتحقيق مشاركة البيانات في ملفات واجهة المستخدم المختلفة ضمن نفس الصفحة. بالإشارة إلى المثال التالي ، اقرأ وكتابة ملفات واجهة المستخدم المختلفة ، ولكن في نطاق الصفحة. كما أنها بسيطة للغاية للاستخدام ، هناك طريقتان ل:
على الرغم من أنها مريحة للغاية ، إلا أنه لا ينصح باستخدامه لأنه غير رسمي للغاية. إذا كان هناك تطور تعاوني أو مشروع معقد ، فمن الصعب تحديد موقع وتصحيح إذا كان هناك خطأ.
// قم بتعيين المتغيرات العالمية لـ JS في test1.ui.js ، طريقتين. // 1. لا تضيف تعريف var prefix متغير ، key1 = "value1" ؛ // 2. تحديد المتغيرات العالمية على deviceOne deviceOne.key2 = {"k1": "v1" ، "k2": "v2" ، "k3": var content = {} ؛ content.key1 = key1 ؛ content.key2_k3 = deviceOne.key2 ["k3"] ؛3. متغيرات JavaScript (نطاق واجهة المستخدم)
لا يلزم تفسير هذا أكثر من اللازم ، ولكن هو تعريف متغير JS العادي ، والذي لا يمكن أن يكون صالحًا إلا في نطاق UI.JS الحالي.
var key1 = "value1" ؛
4. وضع ذاكرة SQLite
عادة ما يكون SQLite وضع ملف. هناك موقف خاص حيث يمكن استخدام SQLite مباشرة في الذاكرة. إنه مناسب لطريقة لاستخدام هياكل البيانات المعقدة وعمليات النص المزعجة. سيكون استخدام عبارات SQL أكثر مرونة.
يمكن أن يكون هناك وضع ذاكرة واحد فقط ، ويتم إصلاح الاسم AS /: Memory /:.
في الوصف التالي لقاعدة بيانات SQLite ، سنقدمها بالتفصيل.
مشاركة الملفات
من السهل أن يفهمها الجميع. مشاركة الملفات في نطاق التطبيق ويمكن أيضًا الوصول إليها بعد إعادة تشغيل التطبيق. يمكنك كتابة المحتوى إلى ملف في أي مكان في التطبيق من خلال مكون do_storage ، ثم قراءة ملف من مكان آخر لقراءة المحتوى. ارجع إلى الأمثلة التالية ، اقرأ وكتابة في صفحات مختلفة على التوالي. ما تحتاج إلى ملاحظته هنا هو أن قراءة الملفات والكتابة عادة ما تكون غير متزامنة ، وعليك أن تتأكد من أن المحتوى قد تمت كتابته قبل أن تتمكن من قراءته.
// كتابة ملفات الملفات 1 و file2 في index.ui.js ، يمكنك كتابة كائنات JSON مباشرة var key1 = "value1" : "v2" ، "k3": "v3" ، "k4": datacache = sm ("do_datacache") ؛ var content = {} ؛ content.key1 = datacache.loadData ("key1") ؛ content.key2_3 = datacache.loaddata ("key2") ["k3"] 2) ؛ // التنسيقيقوم مكون DO_SQLITE بالوصول إلى بيانات قاعدة البيانات
هذا المكون هو مكون MM ، مما يعني أنه يمكن إنشاء مثيلات متعددة. جميع مكونات MM هي نطاق الصفحة بشكل افتراضي ، أو نطاق التطبيق. إنشاء نطاق علامة المعلمة الثالثة لمكون MM.
تجدر الإشارة هنا إلى أن القراءة والكتابة SQLite عادة ما تكون غير متزامنة ، يجب عليك التأكد من أن المحتوى قد تمت كتابته قبل أن تتمكن من قراءته.
1. نطاق التطبيق:
// إنشاء كائن SQLite SQLITE. المعلمة الثانية هي تسمية هذا الكائن. المعلمة الثالثة تمثل النطاق هو APPVAR SQLITE_APP = MM ("do_sqlite" ، "SQLITE_APP_ID1" ، "التطبيق" test_sqlite () {// استخدم هذا الكائن لإنشاء اختبار قاعدة البيانات. تنفيذ عبارة SQL SQLITE_APP.EXECUTESYNC (STU_TABLE) ؛ // إنشاء جدول SQL SQL STU_TABLE = "إنشاء جدول STU_Table (_id integer) المفتاح الأساسي التلقائي ، نص sname ، نص snumber) "؛ // تنفيذ متزامن عبارة SQL SQLITE_APP.EXECUTESYNC (stu_table) ؛ var stu_sql =" insert في stu_table (sname ، snumber) القيم ('xiaoming' ، '01005') القيم ('xiaoliu' ، '01007') "؛ // تنفيذ عبارة SQL بشكل غير متزامن sqlite_app.execute (stu_sql ، الوظيفة (البيانات ، e) {// callback فقط هنا يتم إدراجها في البيانات. كائن sqlite sqlite على أساس المعرف "sqlite_app_id1" والمعلمة الثانية هي تسمية هذا الكائن. قاعدة البيانات ، ليست هناك حاجة لفتحها بعد الآن // إنشاء بيان sql sql var stu_query = "SELECT * from stu_table" ؛ // تنفيذ عبارة QUERY QUERY VAR regud stup = sqlite_app.querysync (stu_query) ؛ label.text = "استخدم هذا الكائن في sqlite.ui test.db/n "+ json.stringify (النتيجة [1] ، null ، 2) ؛2. نطاق الصفحة:
// قم بإنشاء كائن SQLITE الذي تم تحديده في الصفحة ، وعلامة المعرف الوحيدة هي الذاكرة _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 integer مفتاح الأساس التلقائي ، نص sname ، نص snumber) "؛ // تنفيذ عبارة sql sqlite_app.executesync (stu_table) ؛ var stu_sql =" insert إلى stu_table (sname ، smoop) ("laoming '،' 1 ') ؛ stu_table (sname ، snumber) قيم ('laohong' ، '2') ؛ "+" insert في stu_table (sname ، snumber) قيم ('laoliu' ، '3') "؛ // تنفيذ sqlite_app.executeync (stu_sql) بشكل متزامن ؛ // Query جدول قاعدة البيانات الذي تم إنشاؤه في test1.ui.js في test2.ui.js // الحصول على كائن Sqlite الذي تم إنشاؤه var sqlite_app = mm ("do_sqlite" ، "memory_db_id1" ، "page") ؛ // إنشاء Query SQL عبارة var stu_query = "SELECT * from stu_table" ؛ // تنفيذ عبارة QUERY VAR VARD = sqlite_app.querysync (stu_query) ؛ label.text = "Query the the Third the Third the in-memory database table تم إنشاؤها في test1.ui.js in test2تسليم البيانات
يتضمن تسليم البيانات نطاقًا متقاطعًا ، مثل تمرير البيانات في ملفات واجهة المستخدم المختلفة وتمرير البيانات في صفحات مختلفة.
الطريقة الأكثر أهمية والأكثر استخدامًا هي آلية الرسائل
1. آلية الرسالة
سنقدم هذا الرابط بالتفصيل في المستند.
باختصار ، يمكن لآلية الرسائل نقل البيانات عبر نطاقات واجهة المستخدم أو عبر نطاقات الصفحة.
2. صفحة OpenPage و ClosePage Pass.
نقل البيانات هذا هو نطاق الصفحة عبر الصفحة ، ولكن يقتصر على صفحتين من طبقات. على سبيل المثال ، إذا فتحت Page2 على Page1 ، فإن Page1 تقوم بتمرير بعض البيانات إلى Page2 ؛ Page2 يغلق نفسه ، ويعرض Page1 ، ويتم نقل البيانات مرة أخرى إلى Page1. يمكن أن يكون نقل البيانات أي كائن JSON.
هذه طريقة منتظمة وجيدة للغاية ، ويوصى بها لاستخدامها مثل هذا.
// في index.ui.js ، تمرير البيانات var d = {"k1": "v1" ، "k2": "v2" ، "k3": "v3" ، "k4": "v4" اقبل البيانات التي تم تمريرها مرة أخرى عند إغلاق الصفحة Open_Close_Page/Index.ui. page.on ("result" ، function (data) {if (data) nf.alert (json.stringify (data ، null ، 2)) ؛}). إرجاع كائن JSON/n "+ json.stringify (البيانات ، NULL ، 2) ؛ // وظيفة التنسيق CLOSE_ME () {// أغلق نفسه وقم بتمرير البيانات مرة أخرى إلى الطبقة التالية من pageapp.closepage (" لقد مررت بالبيانات عند Open_Close_Page/index.ui مغلق ") ؛}) ؛سأقدم الكثير عن المعرفة ذات الصلة حول مشاركة بيانات JS ونقل البيانات الذي تقدمه لك هذه المقالة. آمل أن يكون ذلك مفيدًا لك!