O compartilhamento de dados e a entrega de dados se complementam, vamos discutir esse problema juntos. A primeira coisa a dizer é que compartilhar e passar são ambos escopo. O escopo é a área onde funciona. Os dados podem ser compartilhados no mesmo escopo. Se você exceder esse escopo, ele é de escopo cruzado e a transmissão de dados deve ser usada.
Escopo
1.ui escopo
Cada arquivo da interface do usuário possui um UI.JS correspondente por padrão. Eles servem como um escopo fechado. O ui.js obtém objetos de interface do usuário com base no ID do componente no arquivo da interface do usuário; Arquivos de interface do usuário diferentes podem definir componentes com o mesmo ID. As variáveis definidas no UI.js só podem ser acessadas neste JS.
2. Escopo da página
Toda vez que você ligar para o OpenPage, uma nova página será aberta e esta nova página será abordada na página antiga. Quando o fechamento se fechar, a página antiga coberta será exposta. Além do arquivo principal da interface do usuário, cada página também pode conter muitos outros arquivos da interface do usuário, que estão no mesmo escopo da página.
Quando a página for fechada, todos os objetos incorporados na página serão lançados.
3. App Scope
Este é o maior escopo. Enquanto o aplicativo não sair, esse escopo sempre será válido.
App.js pertence ao escopo do aplicativo porque não pertence a nenhuma página.
Em resumo, o escopo do aplicativo contém vários escopos de página e o escopo da página contém vários escopos de interface do usuário.
Compartilhamento de memória
Comparados com arquivos e bancos de dados, as operações de memória são muito mais rápidas e são adequadas para operações de dados relativamente pequenas. A desvantagem é que o aplicativo é lançado após o fechamento. DeviceOne compartilha memória das seguintes maneiras.
1. Operação de memória do DO_GLOBAL (escopo do aplicativo)
Este é o compartilhamento de dados no escopo do aplicativo. Essa peça de memória é na verdade um par de valores-chave e uma chave corresponde a um valor; portanto, tenha cuidado para que, se uma chave for transferida, o valor anterior será substituído. O método de uso é muito simples. Consulte os exemplos a seguir, leia e escreva em diferentes páginas, respectivamente.
// Defina o valor em index.ui.js, que pode ser definido como qualquer objeto JSON, com exceções de objeto de função. global.setMemory ("Key1", 1); global.SetMemory ("Key2", "Value1"); global.SetMemory ("Key3", ["A", "B", "C"); var rótulo = ui ("do_label_2"); // Obtenha o valor em memória/index.ui.js, você pode retornar diretamente o objeto json var global = sm ("do_global"); var content = {}; content.key1 = global.getMemory ("key1"); Global.getMemory ("Key3") [1]; content.key4_k3 = global.getMemory ("Key4") ["K3"]; LABEL.TEXT = JSON.STRINGIFY (Content, Null, 2); // formato2. Variáveis globais JavaScript (escopo da página)
Use as próprias características do JavaScript para definir variáveis globais. Geralmente, você pode definir variáveis globais para realizar o compartilhamento de dados em diferentes arquivos de interface do usuário na mesma página. Referindo -se ao exemplo a seguir, leia e escreva em diferentes arquivos da interface do usuário, mas está em um escopo de página. Também é muito simples de usar, há duas maneiras de:
Embora seja muito conveniente, não é recomendável usá -lo porque é muito casual. Se for um desenvolvimento colaborativo ou um projeto complexo, é difícil localizar e depurar se houver um bug.
// Defina as variáveis globais de JS em test1.ui.js, duas maneiras. // 1. Não adicione a definição variável de prefixo var, key1 = "value1"; // 2. Definir variáveis globais no dispositivo de dispositivo de dispositivo.key2 = {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"} // obtém as variáveis globais ": var content = {}; content.key1 = key1; content.key2_k3 = depósitone.key2 ["k3"];3. Variáveis JavaScript (escopo da interface do usuário)
Isso não precisa ser explicado demais, mas é a definição de variável JS normal, que só pode ser válida no escopo atual do UI.JS.
var key1 = "value1";
4. Modo de memória do SQLite
O SQLite geralmente é um modo de arquivo. Há uma situação especial em que o sqlite pode ser usado diretamente na memória. É adequado para uma maneira de usar estruturas de dados complexas e operações de texto problemáticas. O uso de instruções SQL será muito mais flexível.
Só pode haver um modo de memória e o nome é corrigido como /: memória /:.
Na descrição a seguir do banco de dados SQLite, nós o apresentaremos em detalhes.
Compartilhamento de arquivos
Isso é fácil de entender por todos. O compartilhamento de arquivos está no escopo do aplicativo e também pode ser acessado após a reinicialização do aplicativo. Você pode gravar conteúdo em um arquivo em qualquer lugar do aplicativo através do componente Do_Storage e depois ler um arquivo de outro local para ler o conteúdo. Consulte os exemplos a seguir, leia e escreva em diferentes páginas, respectivamente. O que você precisa observar aqui é que a leitura e a escrita de arquivos geralmente são assíncronas, e você deve garantir que o conteúdo tenha sido escrito antes de poder lê -lo.
// grava arquivos file1 e file2 em index.ui.js, você pode escrever diretamente os objetos json var key1 = "value1"; storage.writefile ("data: // file1", key1, function (dados, e) {// o retorno de chamada apenas para escrever o conteúdo. "v2", "k3": "v3", "k4": "v4"}; armazenamento.writefile ("data: // file2", key2, function (dados, e) {// o retorno de chamada apenas termina aqui para escrever o conteúdo. datacache = sm ("do_datacache"); var content = {}; content.key1 = datacache.loadData ("key1"); content.key2_3 = datacache.loaddata ("key2") ["k3"]; relab.text /datacache /index.ui.js, você pode retornar diretamente o JSONBET OBJETO. 2); // formatoDados do banco de dados do DO_SQLite componentes
Esse componente é um componente MM, o que significa que várias instâncias podem ser criadas. Todos os componentes MM são escopo da página por padrão ou escopo do aplicativo. Crie o terceiro escopo de marcação de parâmetros do componente MM.
Deve -se notar aqui que a leitura e a escrita do SQLite geralmente são assíncronas, você deve garantir que o conteúdo tenha sido escrito antes de poder lê -lo.
1. Escopo de aplicativo:
// Crie um objeto Sqlite App-Scope. O segundo parâmetro é o rótulo deste objeto. O terceiro parâmetro marca o escopo é appvar sqlite_app = mm ("do_sqlite", "sqlite_app_id1", "app") function test_sqlite () {// use este objeto para criar um banco de dados test.dbsqlite_app.opn ("data: //test. Execute uma instrução sql sqlite_app.executesync (stu_table); // crie tabela SQL Declaração stu_table = "Criar tabela stu_table (_id inteiro); // criar tabela SQL Declarent sTu_table =" Criar tabela stu_table (_id interior); Chave primária Autoincrement, texto de chapéu, texto mais ardente) "; // Execute síncrono uma instrução sql sqlite_app.executesync (STU_TABLE); var stu_sql =" insert em snet_table (sname) (snumber) ('xiaoming' ('01005'; valores ('xiaoliu', '01007') "; // Executa uma instrução sql de forma assíncrona sqlite_app.execute (stu_sql, function (dados, e) {// a callback é apenas que não se requer que não seja inserida nos dados. Obtenha um objeto SQLite de escopo de app baseado no ID "SQLITE_APP_ID1" e o segundo parâmetro é o rótulo desse objeto. Abra o banco de dados, não há mais necessidade de abri -lo // Criar instrução SQL de consulta var stu_query = "selecione * de stu_table"; // Execute uma declaração de consulta síncrona var resultado = sqlite_app.QuerySync (stu_query); test.db/n "+ json.stringify (resultado [1], null, 2);2. Escopo de página:
// Crie um objeto SQLITE com especificação de página, o único rótulo de ID é memória_db_id1var sqlite_app = mm ("do_sqlite", "memória_db_id1", "página"); // use este objeto para criar um banco de dados de memória no test1.ui.js. Este nome deve ser escrito como: Memória: sqlite_app.open (": memória:"); // Crie a tabela SQL Declaração var stu_table = "Tabela de solteira se existe stu_table;" // a velocidade de execução do banco de dados de memória) é rápida, você pode tentar usar a sincronização // executar uma declaração sql); Stu_table (_ID Inteiro Primária Chave Primária Autoincrement, Texto do Sobre, Texto de Snumber) "; // Execute Syncronely uma instrução SQL SQLITE_APP.EXECUTENSYNC (STU_TABLE); var stu_sql =" insert em stu_table (sname, snumer) (snumer) ('laoming' ',', '1Amert', '1Amert' '1aMert', '1oming', '1aMert', '1aMert', '1oming', '1aMing' ',' 1) Stu_table (SNAME, SNUMBER) VALORES ('laohong', '2'); "+" inserir em stu_table (sname, snumber) valores ('LAOLIU', '3') "; // Syncroente Execute A sql Strat de instrução sqlite_app.executSync (Stu_sql); // consulta a tabela de banco de dados criada em test1.ui.js em test2.ui.js // obtenha o objeto sqlite criado var sqlite_app = mm ("do_sqlite", "memória_db_id1", "página"); // Crie uma instrução sql de consulta var stu_query = "selecione * de stu_table"; // Execute uma declaração de consulta var resultado = sqlite_app.querysync (stu_query); label.text = "consulte o terceiro registro da tabela de dados em memória/j jAcret (JOSET1.UI.JS em Tests2. 2)Entrega de dados
A entrega de dados envolve escopo cruzado, como passar dados em diferentes arquivos da interface do usuário e passar dados em diferentes páginas.
O método mais importante e mais comum é o mecanismo de mensagem
1. Mecanismo de mensagem
Introduziremos este link em detalhes no documento.
Em resumo, o mecanismo de mensagem pode passar dados nos escopos de interface do usuário ou nos escopos de página.
2. Dados de aprovação no OpenPage e ClosePage.
Essa transferência de dados é o escopo de páginas cruzadas, mas é limitado a páginas de duas camadas. Por exemplo, se você abrir a página2 na página1, a página1 passa alguns dados para a página2; A página2 se fecha, expõe a página1 e passa os dados de volta para a página1. A transferência de dados pode ser qualquer objeto JSON.
Esta é uma maneira regular e muito boa, e é recomendável usá -lo assim.
// In index.ui.js, pass data var d = {"k1" : "v1","k2" : "v2","k3" : "v3","k4" : "v4"};app.openPage({source : "source://view/open_close_page/index.ui",data : d,statusBarState : "transparent"});}// Accept Os dados foram passados quando a página open_close_page/index.ui está fechada. página.on ("resultado", function (dados) {if (data) nf.alert (json.stringify (dados, null, 2));}) // os dados passados do index.ui.js podem obter o valor através do getData e pode retornar diretamente o objeto json var data = Page.getData (); Retorne o objeto json/n "+ json.stringify (dados, null, 2); // Função de formato Close_Me () {// Feche a si mesmo e passe os dados de volta para a próxima camada de PageApp.ClosePage (" Passei os dados quando open_close_page/index.ui está fechado ");}Vou apresentar muito sobre o conhecimento relevante sobre o compartilhamento de dados JS e a transmissão de dados que este artigo apresenta a você. Espero que seja útil para você!