Javascript: les paramètres de type "list" sont non-persistants
#1
Bonsoir

Après d'innombrables tests j'en suis arrivé à la conclusion que contrairement aux paramètres de type STRING ou DOUBLE, les paramètres de type LIST sont non-persistants.

C'est à dire que si j'ai un paramètre/état "n" de type double, je peux avoir une commande qui fera

Code :
n = n + 1;

et à chaque exécution de la commande j'aurai "n" qui s'incrémentera. Il y a persistance de la valeur stockée dans "n".

Par contre, je ne peux pas avoir un paramètre de type liste pour faire par ex:

Code :
Commande1:
liste = new Array();
liste[0] = new Array();
liste[0][0] = peu_importe;
liste[0][1] = par_exemple;
liste[1][0] = un_truc;
liste[1][1] = un_autre;

puis
Code :
Commande2:
var longueur = liste.length;

la variable "longueur" vaudra toujours zéro même si j'appelle d'abord "Commande1" puis "Commande2". Apparemment, "liste", quoiqu'étant un "état" de mon équipement JS n'est pas persistant et perd son contenu dès la fin de "Commande1"

Est-ce normal ? Est-ce que je me trompe ? Comment récupérer "liste" si c'est le cas ?
www.osmotiq.com, domotique, développement logiciel et web -- tests & tutoriels KNX, Lifedomus, ZWave, etc.
Twitter: osmotiq
Répondre
#2
Bonjour,

Les variables de type list sont elles aussi persistantes si elles sont des variables du device.
essayez par exemple dans commande 2 de récupérer liste[0][0] et vous aurez son contenu.

Par contre, j'ai remarquer après des tests que la méthode lenght ne passez pas bien sur un array dans un autre endroit que celui où il est initialisé, ici dans commande2.
Je vais continuer à chercher mais le contenu est OK.

Julien
Répondre
#3
Merci pour ta réponse Julien, en effet, tu as raison, après quelques tests supplémentaires, j'ai en effet pu constater que le contenu est bel et bien persistant ...

Cependant ce n'est pas tout à fait un Array javascript classique ...

Prenons l'exemple suivant, un équipement JS avec les variables de device suivantes:
x: STRING
liste: LIST

Commande1:
Code :
liste = new Array();
liste[0] = new Array();
liste[0][0] = '0';
liste[0][1] = 'un truc';
liste[0][2] = 'mouette';    // ici je fais exprès de mettre autre chose qu'un chiffre, et en plus je vais plus loin dans les indices que ce qui est normalement prévu par LD
liste[0][3] = 'machin';
liste[0][4] = '2';                            
liste[0][5] = 'sapristi';


Commande2:
Code :
x = liste[0][0];[COLOR=#3E3E3E]
[/COLOR]


Je mets dans le DS un widget qui affiche la valeur de "x" et qui appelle Commande1 si on clique sur la gauche du widget et Commande2 si on clique à droite.

Dans ce cas, "x" vaut "0:::un truc:::mouette:::machin:::2" ! et non pas juste "0"
Etrange de voir en plus que "sapristi" est totalement laissé pour compte ...

Si je modifie Commande2 pour que "x" prenne la valeur de "liste[0][1]", j'obtiens "sapristi" et non pas "un truc" !
Si je modifie Commande2 pour que "x" prenne la valeur de "liste[0][2]", j'obtiens très clairement une erreur "org.mozilla.javascript.Undefined@xxxxx" ... idem pour les indices suivants ... comme si ils n'existaient pas !

Je modifie alors Commande1 de manière à ne pas dépasser les indices [0][1] ... et dans ce cas tout rentre dans l'ordre ...

Je suis bien conscient que je sors totalement du cadre prévu par LD (le type "liste" est censé servir uniquement à la gestion du widget liste dans le DS -- cf la doc)
[ATTACH=CONFIG]272[/ATTACH][ATTACH=CONFIG]271[/ATTACH]

J'en conclus de mes tests que tout indice supérieur à [n][1] entraine une concaténation dans [n][0] (avec des ":::" comme séparation) de manière à avoir TOUJOURS un array qui respecte les besoins du "widget Liste": seuls les indices [n][0] et [n][1] sont acceptés ... c'est évidemment dommage, j'aurais bien voulu qu'il n'y ait pas un reformatage des données par LD ...

est-il possible qu'un jour on puisse profiter de véritables Arrays javascript qui seraient également des variables device ? est-ce que ca demanderait un gros travail d'adaptation du type "liste" ?
et sinon en effet avoir la longueur du tableau qui fonctionne comme prévu ce serait bien, ca éviterait de devoir la stocker dans une autre variable du device ...


Pièces jointes Image(s)
       
www.osmotiq.com, domotique, développement logiciel et web -- tests & tutoriels KNX, Lifedomus, ZWave, etc.
Twitter: osmotiq
Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Requête: pour un débugage plus efficace du code javascript tilleul 2 5,679 12-17-2014, 10:19 AM
Dernier message: Domo-TIC
  Moteur javascript de la LD planté ? tilleul 3 6,630 12-08-2014, 02:27 PM
Dernier message: laurent
  les variables javascript sont communes à tous les équipements d'un même connecteur ?? tilleul 5 9,496 04-03-2014, 08:24 AM
Dernier message: tilleul
  Javascript: ajouter des items à un paramètre "liste" en plusieurs fois ? tilleul 0 3,086 03-29-2014, 12:15 PM
Dernier message: tilleul
  Javascript: bugs constatés tilleul 0 2,900 02-23-2014, 10:02 PM
Dernier message: tilleul
  Commande Javascript tilleul 6 9,341 02-19-2014, 01:36 PM
Dernier message: tilleul
  Problème de liste déroulante type de variable coyotus 2 5,580 02-17-2014, 06:40 PM
Dernier message: coyotus



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)