データ共有とデータ配信は互いに補完します。この問題について一緒に話し合いましょう。最初に言うのは、共有と合格が両方ともスコープされているということです。スコープは、それが機能するエリアです。データは同じ範囲で共有できます。このスコープを超える場合、それはクロススコープであり、データ送信を使用する必要があります。
範囲
1.UIスコープ
各UIファイルには、デフォルトで対応するUI.jsがあります。彼らは閉じた範囲として機能します。 UI.jsは、UIファイルのコンポーネントのIDに基づいてUIオブジェクトを取得します。異なるUIファイルは、同じIDでコンポーネントを定義できます。 UI.JSで定義されている変数は、このJSでのみアクセスできます。
2.ページスコープ
OpenPageを呼び出すたびに、新しいページが開かれ、この新しいページは古いページで説明されます。クローゼページが閉じると、覆われた古いページが公開されます。メインの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" a "a" a "a" a "]); global.setmemory(" key4 "、{" k1 ":" v1 "、" k4 ":" k3 ":" "k2"; var label = ui( "do_label_2"); //メモリ/index.ui.jsで値を取得すると、jsonオブジェクトvar global = sm( "do_global"); var content = {}; content.key1 = global.getmemory( "key1"); content.key2 = global.key3_2 = key2 "); key2"); Global.getMemory( "key3")[1]; content.key4_k3 = global.getmemory( "key4")["k3"]; label.text = json.stringify(content、null、2); // format2。JavaScriptグローバル変数(ページスコープ)
JavaScript独自の特性を使用して、グローバル変数を定義します。通常、グローバル変数を定義して、同じページの下の異なるUIファイルのデータ共有を実現できます。次の例を参照すると、さまざまなUIファイルで読み取りと書き込みがありますが、ページの範囲にあります。また、非常に簡単に使用できます。2つの方法があります。
非常に便利ですが、カジュアルすぎるために使用することはお勧めしません。それが共同開発または複雑なプロジェクトである場合、バグがある場合、見つけてデバッグすることは困難です。
// test1.ui.jsでJSのグローバル変数を2つの方法で設定します。 //1。varプレフィックス変数定義、key1 = "value1"; // 2。deviceone object device2 = {"k1": "v1"、 "k2": "v2"、 "k3": "v3"、 "k4": "v4"} // test1.ui.jsで定義されているグローバルなバリアブルを取得しないでください。 var content = {}; content.key1 = key1; content.key2_k3 = deviceone.key2 ["k3"];3。JavaScript変数(UIスコープ)
これはあまり説明する必要はありませんが、現在のui.jsスコープでのみ有効な通常のJS変数定義です。
var key1 = "value1";
4。sqliteのメモリモード
SQLiteは通常、ファイルモードです。 SQLiteをメモリで直接使用できる特別な状況があります。複雑なデータ構造と厄介なテキスト操作を使用する方法に適しています。 SQLステートメントの使用ははるかに柔軟になります。
メモリモードは1つだけで、名前は /:メモリ /:に固定されています。
SQLiteデータベースの以下の説明では、詳細に紹介します。
ファイル共有
これは誰でも理解しやすいです。ファイル共有はアプリの範囲内にあり、アプリが再起動された後にもアクセスできます。 do_storageコンポーネントを介してアプリのどこにでもファイルにコンテンツを書き込むことができ、別の場所からファイルを読んでコンテンツを読み取ることができます。次の例を参照して、それぞれ異なるページで読み書きしてください。ここで注意する必要があるのは、ファイルの読み取りと書き込みは通常非同期であり、読む前にコンテンツが書かれていることを確認する必要があることです。
// index.ui.jsでファイルfile1とfile2を書き込み、jsonオブジェクトを直接書き込むことができますvar key1 = "value1"; storag.writefile( "data:// file1"、key1、function(data、e){//コールバックはここでのみ終了します。 "v2"、 "k3": "v3"、 "k4": "v4"}; storage.writefile( "data:// file2"、key2、function(data、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、nultify /json. json.stringを直接返すことができます。 2); //形式do_sqliteコンポーネントデータベースデータにアクセスします
このコンポーネントはMMコンポーネントです。つまり、複数のインスタンスを作成できます。すべてのMMコンポーネントは、デフォルトではページスコープ、またはアプリスコープです。 MMコンポーネントの3番目のパラメーターマーキングスコープを作成します。
ここでは、sqliteの読み取りと執筆は通常非同期であることに注意する必要があります。読む前にコンテンツが書かれていることを確認する必要があります。
1。アプリの範囲:
//アプリスコープSQLiteオブジェクトを作成します。 2番目のパラメーターは、このオブジェクトのラベルです。 3番目のパラメーターは、スコープがAppvar sqlite_app = mm( "do_sqlite"、 "sqlite_app_id1"、 "app")function test_sqlite(){//このオブジェクトを使用してデータベースtest.dbsqlite_app.open( "data://test.db"); SQLステートメントSQLITE_APP.EXECUTESYNC(STU_TABLE); // Table SQL Statement Stu_Table = "Create Table Stu_table(_id Integer); // Table SQL Statement Stu_table =" Create Table Stu_table(_id Integer);プライマリキーオートインクレメント、スナムテキスト、スナンバテキスト) "; // sqlite_app.executesync(stu_table); var stu_table(sname、snumber)values( 'xiaoming'、 '01005');" Stu_table(snamumber、snamumber( 'xiaoming'、 '01005');値( 'xiaoliu'、 '01007') ID「SQLITE_APP_ID1」に基づくApp-Scope SQLiteオブジェクトと2番目のパラメーターは、このオブジェクトのラベルです。スコープはappvar sqlite_app = mm( "do_sqlite"、 "sqlite_app_id1"、 "app")//データベース、それを開く必要はありません//クエリSQLステートメントVar Stu_Query = "Select * from Stu_table"; //クエリステートメントを同期してresults = sqlite_app.querysync(stu_query); label.text = "sqlite/sqlite/index.ui.js in stuable in stu in sqlite/sqlite.ui.jsを使用するtest.db/n "+ json.stringify(result [1]、null、2);2。ページスコープ:
//ページscoped sqliteオブジェクトを作成すると、唯一のidラベルはmemory_db_id1var sqlite_app = mm( "do_sqlite"、 "memory_db_id1"、 "page"); //このオブジェクトを使用してtest1.ui.jsでメモリデータベースを作成します。この名前は、メモリ:sqlite_app.open( ":memory:"); // table sql statement var stu_table = "stu_tableの場合はドロップテーブル;" //メモリデータベースの実行速度が高速であるように記述する必要があります。 stu_table(_id integerプライマリキーオートインクレメント、スナムテキスト、スナンバテキスト) "; // sqlステートメントSqlite_app.executesync(stu_table); var stu_sql =" stu_table(sname、sname、snamumber)(sname '); " values( 'laohong'、 '2'); "+" stu_table(sname、snumber)values( 'laoliu'、 '3') " // test1.ui.jsで作成されたデータベーステーブルをtest2.ui.js //作成した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 = "query query query query exted clear
データ配信
データ配信には、異なるUIファイルにデータを渡すことや、異なるページにデータを渡すなど、クロススコープが含まれます。
最も重要で最も一般的に使用される方法は、メッセージメカニズムです
1。メッセージメカニズム
このリンクをドキュメントに詳細に紹介します。
要するに、メッセージメカニズムは、UIスコープまたはページスコープ全体にデータを渡すことができます。
2。OpenPageおよびClosePageパスデータ。
このデータ転送はページクロススコープですが、2層ページに制限されています。たとえば、Page1にPage2を開くと、Page1はデータをPage2に渡します。 Page2はそれ自体を閉じ、Page1を公開し、データをPage1に戻します。データ転送は、任意のJSONオブジェクトにすることができます。
これは定期的で非常に良い方法であり、このように使用することをお勧めします。
// index.ui.jsで、パスデータvar d = {"k1": "v1"、 "k2": "v2"、 "k3"、 "v3"、 "k4": "v4"}; app.openpage({source://view/open_close_page/index.ui "ページがopen_close_page/index.uiが閉じているときに渡されたデータを受け入れます。 page.on( "result"、function(data){if(data)nf.alert(json.stringify(data、null、2));})// index.ui.jsから渡されたデータは、getDataを通じて値を取得でき、jsonオブジェクトを直接返すことができます。 json object/n "+ json.stringify(data、null、2); // format close_me(){// close close and close and coshe of pageapp.closepage(" open_close_page/index.uiが閉じているときにデータを渡しました ");}JSデータ共有とデータ送信に関する関連する知識について多くのことを紹介します。この記事では、あなたに紹介します。それがあなたに役立つことを願っています!