Le partage de données et la livraison de données se complètent mutuellement, discutons ensemble de ce problème. La première chose à dire est que le partage et le passage sont tous deux dans le cadre. La portée est la zone où elle fonctionne. Les données peuvent être partagées dans la même portée. Si vous dépassez cette portée, elle est en scope croisée et la transmission de données doit être utilisée.
Portée
1.UI Portée
Chaque fichier d'interface utilisateur a une ui.js correspondante par défaut. Ils servent de portée fermée. ui.js obtient des objets UI basés sur l'ID du composant dans le fichier UI; Différents fichiers d'interface utilisateur peuvent définir des composants avec le même ID. Les variables définies dans ui.js ne sont accessibles que dans ce js.
2. Portée de la page
Chaque fois que vous appelez OpenPage, une nouvelle page sera ouverte et cette nouvelle page sera couverte sur l'ancienne page. Lorsque la clôture se ferme, l'ancienne page couverte sera exposée. En plus du fichier d'interface utilisateur principal, chaque page peut également contenir de nombreux autres fichiers d'interface utilisateur, qui sont dans la même portée.
Lorsque la page est fermée, tous les objets intégrés dans la page seront publiés.
3. Portée de l'App
Il s'agit de la plus grande portée. Tant que l'application ne sort pas, cette portée sera toujours valide.
app.js appartient à la portée de l'application car elle n'appartient à aucune page.
En bref, la portée de l'application contient plusieurs lunettes de page et la portée de la page contient plusieurs portées d'interface utilisateur.
Partage de mémoire
Par rapport aux fichiers et bases de données, les opérations de mémoire sont beaucoup plus rapides et conviennent aux opérations de données relativement petites. L'inconvénient est que l'application est libérée après sa fermeture. DeviceOne partage la mémoire de la manière suivante.
1. Do_global's Memory Operation (App Scope)
Il s'agit du partage de données dans la portée de l'application. Ce morceau de mémoire est en fait une paire de valeurs de clé, et une clé correspond à une valeur, alors faites attention que si une clé est réaffectée, la valeur précédente sera écrasée. La méthode d'utilisation est très simple. Reportez-vous aux exemples suivants, lisez et écrivez respectivement dans différentes pages.
// Définissez la valeur dans index.ui.js, qui peut être définie sur n'importe quel objet JSON, avec des exceptions de l'objet fonction. global.setMemory ("key1", 1); global.setMemory ("key2", "value1"); global.setMemory ("key3", ["a", "b", "c"]); global.setMemory ("key4", {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " var label = ui ("do_label_2"); // Obtenez la valeur dans la mémoire / index.ui.js, vous pouvez directement renvoyer l'objet JSON var global = sm ("do_global"); var contenu = {}; content.key1 = global.getMemory ("key1"); contenu.key2 = global.getMemory ("key2"); Content.Keyy3_2 = global.getMemory ("key3") [1]; content.key4_k3 = global.getMemory ("key4") ["k3"]; laboratoire2. Variables globales JavaScript (portée de la page)
Utilisez les propres caractéristiques de JavaScript pour définir les variables globales. Vous pouvez généralement définir des variables globales pour réaliser le partage de données dans différents fichiers d'interface utilisateur sous la même page. Se référant à l'exemple suivant, lisez et écrivez dans différents fichiers d'interface utilisateur, mais se trouvent dans une portée de page. Il est également très simple à utiliser, il existe deux façons de:
Bien qu'il soit très pratique, il n'est pas recommandé de l'utiliser car il est trop décontracté. S'il s'agit d'un développement collaboratif ou d'un projet complexe, il est difficile de localiser et de déboguer s'il y a un bogue.
// Définissez les variables globales de JS dans test1.ui.js, deux manières. // 1. N'ajoutez pas la définition de variable de préfixe var, key1 = "value1"; // 2. Définir les variables globales sur le dispositifone objet deviceOne.key2 = {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"} // obtenir les variables globales définies dans le test1.Ui.js dans le testeur. var content = {}; contenu.key1 = key1; contenu.key2_k3 = deviceOne.key2 ["k3"];3. Variables JavaScript (portée UI)
Cela n'a pas besoin d'être trop expliqué, mais est la définition de variable JS normale, qui ne peut être valide que dans la portée actuelle de l'UI.js.
var key1 = "value1";
4. Mode Mémoire de Sqlite
SQLite est généralement un mode de fichier. Il existe une situation spéciale où SQLite peut être utilisé directement en mémoire. Il convient pour un moyen d'utiliser des structures de données complexes et des opérations de texte gênantes. L'utilisation des instructions SQL sera beaucoup plus flexible.
Il ne peut y avoir qu'un seul mode de mémoire, et le nom est fixé en tant que /: mémoire /:.
Dans la description suivante de la base de données SQLite, nous la présenterons en détail.
Partage de fichiers
C'est facile à comprendre pour tout le monde. Le partage de fichiers est dans la portée de l'application et peut également être accessible après le redémarrage de l'application. Vous pouvez écrire du contenu dans un fichier n'importe où dans l'application via le composant DO_STORAGE, puis lire un fichier d'un autre endroit pour lire le contenu. Reportez-vous aux exemples suivants, lisez et écrivez respectivement dans différentes pages. Ce que vous devez noter ici, c'est que la lecture et l'écriture de fichiers sont généralement asynchrones, et vous devez vous assurer que le contenu a été écrit avant de pouvoir le lire.
// Écriture de fichiers file1 et file2 dans index.ui.js, vous pouvez écrire directement les objets json var key1 = "value1"; Storage.WriteFile ("data: // file1", key1, fonction (data, e) {// Le rappel se termine uniquement ici pour écrire le contenu. Si vous lisez le fichier avant de exécuter ici, "V1" "v2", "k3": "v3", "k4": "v4"}; stockage.writefile ("data: // file2", key2, function (data, e) {// Le rappel se termine uniquement ici pour écrire le contenu. Si vous lisez le fichier avant d'exécuter ici, il peut ne pas être en mesure de lire les données}) // obtenir l'objectif dans Datacache / index.Ui.js, vous pouvez retourner le jon-élément de la valeur dans Datacache / Index.Ui. dataCache = sm ("do_datacache"); var tent contenu = {}; contenu.key1 = datacache.loadData ("key1"); contenu.key2_3 = datacache.loaddata ("key2") ["k3"]; label.text = "datacache / index.ui.js, vous pouvez dire directement l'objet json / n" + json.strify. FormatLe composant DO_SQLITE accède aux données de la base de données
Ce composant est un composant MM, ce qui signifie que plusieurs instances peuvent être créées. Tous les composants MM sont par défaut de la portée de la page ou de la portée de l'application. Créez la troisième portée de marquage des paramètres du composant MM.
Il convient de noter ici que la lecture et l'écriture de SQLite sont généralement asynchrones, vous devez vous assurer que le contenu a été écrit avant de pouvoir le lire.
1. Portée de l'application:
// Créez un objet SQLite App-Scope. Le deuxième paramètre est l'étiquette de cet objet. Le troisième paramètre marque la portée est appvar sqlite_app = mm ("do_sqlite", "sqlite_app_id1", "app") function test_sqlite () {// Utilisez cet objet pour créer une base de données test.dbsqlite_app.open ("data: //test.db"); Exécuter une instruction SQL SQLITE_APP.EXECUTESYNC (STU_TABLE); // CREATE TABLE SQL STERNET STU_TABLE = "CREATE TABLE STU_TABLE (_ID INTEGER); // Create TABLE SQL Instruction Stu_Table =" Create Table Stu_Table (_id INTERGER); Clé primaire AutoIncrement, texte de sname, texte de snumber) "; // Exécutez de manière synchrone une instruction SQL SQLITE_APP.EXECUTESYNC (STU_TABLE); var Stu_Sql =" Insérer dans Stu_Table (SNAME, SNUNGER) VALEURS ('XiaoMing', '01005'); Valeurs ('Xiaoliu', '01007') "; // Exécuter une instruction SQL Asynchrone SQLite_App.Execute (Stu_Sql, Fonction (Données, E) {// Le rappel est seulement ici qu'il est vraiment inséré dans les données. Si vous interrogez les données avant de l'exécuter, il peut être en mesure de lire le périphérique de données. APP-SCOPE SQLITE Objet basé sur l'ID "SQLITE_APP_ID1" et le deuxième paramètre est l'étiquette de cet objet. database, there is no need to open it anymore// Create query SQL statement var stu_query = "select * from stu_table";// Execute a query statement synchronously var result = sqlite_app.querySync(stu_query);label.text = "Use this object in sqlite/index.ui.js to query the second piece of data of the stu_table table in test.db / n "+ json.stringify (résultat [1], null, 2);2. Portée de la page:
// Créez un objet SQLite scoped Page, la seule étiquette d'ID est Memory_DB_ID1VAR SQLITE_APP = MM ("DO_SQLITE", "Memory_DB_ID1", "Page"); // Utilisez cet objet pour créer une base de données de mémoire dans test1.ui.js. Ce nom doit être écrit comme: Mémoire: sqlite_app.open (": mémoire:"); // Créer la table SQL Garn Stu_Table = "Drop Table Si existe Stu_Table;" // La vitesse d'exécution de la base de données de mémoire est rapide, vous pouvez essayer d'utiliser Synchronization // Exécuter une déclaration SQL SQLITE_APP.EXECUTESYNC STU_TABLE (_ID INTER CLIE PRIMATE AUTO-OUTOINS, Texte de sname, texte de snumber) "; // Exécuter de manière synchrone une instruction SQL SQLITE_APP.EXECUTESYNC (Stu_Table); var Stu_Sql =" INSERT IN STU_TABLE (SNAME, SUNMING) VALEURS ('LAMUMING', '1'); "+" INSERTER IN STU_TABLE (SNUMING ',' 1 '); "+" valeurs ('laohong', '2'); "+" Insérer dans Stu_Table (Sname, Snumber) Values ('Laoliu', '3') "; // Exécuter de manière synchrone une instruction SQL SQLITE_APP.EXECUTESYNC (STU_SQL); // interroge la table de base de données créée dans test1.ui.js dans test2.ui.js // Obtenez l'objet Sqlite créé var sqlite_app = mm ("DO_SQLITE", "Memory_DB_ID1", "page"); // Créer une instruction SQL de requête var stu_query = "select * from Stu_Table"; // Exécuter une instruction de requête var result = sqlite_app.querySync (Stu_Query); label.text = "Query The Third Record of the In-Memory Database TableLivraison de données
La livraison de données implique un scope croisée, comme le passage des données dans différents fichiers d'interface utilisateur et le passage des données dans différentes pages.
La méthode la plus importante et la plus couramment utilisée est le mécanisme de message
1. Mécanisme de message
Nous présenterons ce lien en détail dans le document.
En bref, le mécanisme de message peut transmettre des données entre les lunettes d'interface utilisateur ou sur les lunettes de page.
2. Données OpenPage et Ferpage Pass.
Ce transfert de données est de portée croisée, mais est limité aux pages à deux couches. Par exemple, si vous ouvrez Page2 sur Page1, Page1 transmet quelques données à Page2; Page2 se ferme, expose Page1 et transmet les données à Page1. Le transfert de données peut être n'importe quel objet JSON.
C'est un moyen régulier et très bon, et il est recommandé de l'utiliser comme ça.
// dans index.ui.js, pass de données var d = {"k1": "v1", "k2": "v2", "k3": "v3", "k4": "v4"}; app.openpage ({source: "source: //view/open_close_page") Les données remontées lorsque la page Open_CLOSE_PAGE / INDEX.UI est fermée. page.on ("result", fonction (data) {if (data) nf.alert (json.stringify (data, null, 2));}) // les données transmises à partir de l'index.ui.js peuvent obtenir la valeur via getData, et peuvent directement renvoyer l'objet JSON var data = page.getData (); label.tex json objet / n "+ json.stringify (data, null, 2); // Format function close_me () {// fermer lui-même et transmettre les données à la couche suivante de pageApp.closepage (" J'ai passé les données lorsque Open_Close_Page / index.UI est fermée ");}Je vais présenter tellement les connaissances pertinentes sur le partage de données JS et la transmission des données que cet article vous présente. J'espère que cela vous sera utile!