데이터 공유 및 데이터 전달은 서로를 보완합니다.이 문제를 함께 논의 해 봅시다. 가장 먼저 할 말은 공유와 통과가 모두 범위를 지니고 있다는 것입니다. 범위는 작동하는 영역입니다. 데이터는 동일한 범위로 공유 할 수 있습니다. 이 범위를 초과하는 경우 크로스 스코프이며 데이터 전송을 사용해야합니다.
범위
1.UI 범위
각 UI 파일에는 기본적으로 해당 UI.JS가 있습니다. 그들은 폐쇄 범위 역할을합니다. UI.JS는 UI 파일의 구성 요소의 ID에 기초하여 UI 객체를 얻습니다. 다른 UI 파일은 동일한 ID로 구성 요소를 정의 할 수 있습니다. UI.JS에 정의 된 변수는이 JS에서만 액세스 할 수 있습니다.
2. 페이지 범위
OpenPage에 전화 할 때마다 새 페이지가 열리고이 새 페이지는 이전 페이지에 포함됩니다. Closepage가 닫히면 덮은 이전 페이지가 노출됩니다. 기본 UI 파일 외에도 각 페이지에는 동일한 페이지 범위에있는 다른 많은 UI 파일도 포함 할 수 있습니다.
페이지가 닫히면 페이지에 내장 된 모든 객체가 해제됩니다.
3. App Scope
이것은 가장 큰 범위입니다. 앱이 종료되지 않는 한,이 범위는 항상 유효합니다.
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", "k2", "k3", "k4")) var label = ui ( "do_label_2"); // 메모리/index.ui.js에서 값을 얻습니다. Global.getMemory ( "key3") [1]; content.key4_k3 = global.getMemory ( "key4") [ "K3"]; label.text = json.stringify (content, null, 2); // 형식2. JavaScript 글로벌 변수 (페이지 범위)
전역 변수를 정의하기 위해 JavaScript 자체 특성을 사용하십시오. 일반적으로 글로벌 변수를 정의하여 같은 페이지의 다른 UI 파일에서 데이터 공유를 실현할 수 있습니다. 다음 예를 참조하면 다른 UI 파일로 읽고 쓰지만 페이지 범위에 있습니다. 또한 사용하기가 매우 간단합니다. 두 가지 방법이 있습니다.
매우 편리하지만 너무 캐주얼하기 때문에 사용하는 것이 좋습니다. 협업 개발 또는 복잡한 프로젝트 인 경우 버그가 있는지 여부를 찾아서 디버깅하기가 어렵습니다.
// JS의 전역 변수를 test1.ui.js에서 두 가지 방법으로 설정합니다. // 1. var prefix 변수 정의, key1 = "value1"; // 2. DeviceOne 객체 deviceone.key2 = { "k1": "v1", "k2": "v2", "k3": "v3": "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 문을 사용하는 것이 훨씬 유연합니다.
메모리 모드가 하나만있을 수 있으며 이름은 /: memory /:로 고정됩니다.
SQLITE 데이터베이스에 대한 다음 설명에서 자세히 소개합니다.
파일 공유
이것은 모든 사람이 이해하기 쉽습니다. 파일 공유는 앱의 범위에 있으며 앱이 다시 시작된 후에도 액세스 할 수 있습니다. do_storage 구성 요소를 통해 앱의 어느 곳에서나 파일에 컨텐츠를 작성한 다음 다른 장소에서 파일을 읽고 컨텐츠를 읽을 수 있습니다. 다음 예제를 참조하고 각각 다른 페이지에서 읽고 씁니다. 여기서 주목해야 할 것은 파일 읽기와 쓰기가 일반적으로 비동기식이라는 것이며, 내용을 읽기 전에 컨텐츠가 작성되었는지 확인해야합니다.
// index.ui.js에 파일 1 및 file2를 쓰면 json 객체 var key1 = "value1"; Storage.writeFile ( "data : // file1", key1, function (data, e) {// 콜백만으로 컨텐츠를 작성하기 전에 파일을 읽는 경우 데이터를 읽을 수 없을 수 있습니다. "v2", "k3": "v3", "k4": "v4"}; Storage.writeFile ( "data : // file2", key2, function (data, e) {// 콜백은 여기에서 컨텐츠를 작성하기 위해 파일을 읽는 경우 데이터를 읽을 수 없을 수 있습니다. datacache/ui.js에서 값을 얻지 못할 수 있습니다. 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. 형식do_sqlite 구성 요소는 데이터베이스 데이터에 액세스합니다
이 구성 요소는 MM 구성 요소로 여러 인스턴스를 생성 할 수 있습니다. 모든 MM 구성 요소는 기본적으로 페이지 범위 또는 앱 범위입니다. MM 구성 요소의 세 번째 매개 변수 표시 범위를 만듭니다.
여기서 sqlite 읽기와 쓰기는 일반적으로 비동기식이라는 점에 유의해야합니다. 내용을 읽기 전에 컨텐츠가 작성되었는지 확인해야합니다.
1. 앱 범위 :
// 앱 스코프 sqlite 객체를 만듭니다. 두 번째 매개 변수는이 객체의 레이블입니다. 세 번째 매개 변수는 범위가 appvar sqlite_app = mm ( "do_sqlite", "sqlite_app_id1", "app") 함수 test_sqlite () {//이 개체를 사용하여 데이터베이스 test.dbsqlite_app.open ( "data : //test.db"); var stu_table = "nof table" "). sql station sqlite_app.executesync (stu_table); // 테이블 생성 sql state stu_table = "테이블 만들기 stu_table (_id Integer); // 테이블 sql 문 만들기 stu_table ="테이블 stu_table (_id Integer); 기본 키 자동화, Sname Text, Snumber Text) "; // SQL 문을 동기로 실행하여 sqlite_app.executesync (stu_table); var stu_sql ="stu_table (sname, snamber) 값 ( 'Xiaoming', '01005')에 삽입 값 ( 'Xiaoliu', '01007') "; // SQL 문을 실행하여 sql 문을 비동기 SQLITE_APP.Execute (stu_sql, function (data, e) {// 콜백은 데이터에 실제로 삽입되면 데이터를 쿼리하는 경우 데이터를 읽을 수 없을 수 있습니다. ID "SQLITE_APP_ID1"을 기반으로 한 앱 스코프 SQLITE 객체와 두 번째 매개 변수는이 객체의 레이블 이이 범위가 AppVar Sqlite_app = mm ( "do_sqlite", "sqlite_app_id1", "app")임을 나타냅니다. 데이터베이스는 더 이상 열 필요가 없습니다. // 쿼리 sql stu var stu_query = "select * from stu_table"; // query statement 동기 실행 var var result = sqlite_app.querysync (stu_query); text = "sqlite/index.ui.js a STU _TALION에서 두 번째 부분 에이 개체를 사용하십시오. test.db/n "+ json.stringify (result [1], null, 2);2. 페이지 범위 :
// 페이지 스코핑 된 sqlite 객체를 만듭니다. 유일한 ID 레이블은 memory_db_id1var sqlite_app = mm ( "do_sqlite", "memory_db_id1", "page")입니다.이 개체를 사용하여 test1.ui.js에서 메모리 데이터베이스를 만듭니다. 이 이름은 다음과 같이 작성되어야합니다. : sqlite_app.open ( ": memory :"); // 테이블 sql station var stu_table = "drop table stu_table;"// 메모리 데이터베이스 실행 속도가 빠르므로 synchronization // sqlite_app.executesync (stu_table); stu_table (_ID 정수 기본 키 자동화, Sname Text, Snamber Text) "; // sql 문을 동기화하여 sqlite_app.executesync (stu_table); var stu_sql ="stu_table (sname, snamber) 값에 삽입 (sname, '1') 값 ( 'laohong', '2'); "+"stu_table (sname, snumber) value ( 'laoliu', '3') "; // sql statement sqlite_app.executesync (stu_sql); // test22.ui.js에서 test1.ui.js에서 생성 된 데이터베이스 테이블 쿼리 생성 된 sqlite 객체 var sqlite_app = mm ( "do_sqlite", "memory_db_id1", "page"); // Query sql station var stu_query = "select * from stu_table"; // 쿼리 문장 var ret = sqlite_app.querysync (stu_query); label.text = "query test1.ui.js/n"+ json.
데이터 전달
데이터 전달에는 다른 UI 파일로 데이터를 전달하고 다른 페이지에서 데이터를 전달하는 것과 같은 데이터 전달이 포함됩니다.
가장 중요하고 가장 일반적으로 사용되는 방법은 메시지 메커니즘입니다.
1. 메시지 메커니즘
이 링크를 문서에 자세히 소개합니다.
요컨대, 메시지 메커니즘은 UI 범위 또는 페이지 스코프 전체에 걸쳐 데이터를 전달할 수 있습니다.
2. OpenPage 및 ClosePage Pass 데이터.
이 데이터 전송은 교차 페이지 범위이지만 2 층 페이지로 제한됩니다. 예를 들어, Page1에서 Page2를 열면 Page1은 일부 데이터를 Page2로 전달합니다. Page2는 자체를 닫고 Page1을 노출시키고 데이터를 Page1로 전달합니다. 데이터 전송은 JSON 객체 일 수 있습니다.
이것은 규칙적이고 아주 좋은 방법이며, 이와 같이 사용하는 것이 좋습니다.
// index.ui.js에서 데이터 전달 데이터 var d = { "k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"}; app.openpage ({출처 : "출처 : //view/open_close_page/index.ui", data : d, prallparent ")); 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 var data = pagedata (); label.getdata ()를 통해 직접 통과 할 수 있습니다. JSON Object/n "+ json.stringify (data, null, 2); // 형식 기능 close_me () {// 자체를 닫고 데이터를 다음 레이어의 다음 레이어로 다시 전달합니다.이 기사에서 소개하는 JS 데이터 공유 및 데이터 전송에 대한 관련 지식에 대해 너무 많이 소개하겠습니다. 나는 그것이 당신에게 도움이되기를 바랍니다!