Problème State Objects avec angular

Bonjour,

Vendredi nous avons lié notre constellation à un fichier html, et dans la méthode avec Angular, nous ne pouvons pas afficher les State Objects sur notre page web si le nom du State Object contient un /.

Par exemple, les State Objects du package HWMonitor (ex : /hdd/0/load/0).

Que faut-il faire pour régler ce problème ?

Bonjour,

Il faut utiliser des crochets, par exemple : {{SENTINELLE.HWMonitor[’/intelcpu/0/load/0’].Value.Value}}

Merci Hydro pour la réponse !
En effet, comme indiqué en cours, en Javascript :
“monObject.MaPropriete” est équivalent à "monObject[‘MaPropriete’] !
C’est grâce à cela que nous pouvons ajouter nos SO dans la variable de scope Angular de manière dynamique afin de pouvoir l’exploiter très facilement dans notre Template HTML de la façon suivante {{ NomSentinel.NomPackage.NomSO }}

Cependant, en JS (comme les autres langage), il y a des caractères interdits pour les noms de variables, propriétés, classes & co… Comme les “/” que tu retrouves dans le SO du package HWMonitor.
Il y a aussi les “-” qui ne passent pas ou encore les espaces qu’on peut retrouver dans le nom de certain package. Idem si ta des “.”, ca va pas le faire !

De ce fait, deux solutions :

  1. "Cleaner" le nom avant de l'ajouter dans le scope
  2. Utiliser les indexeurs pour accéder aux SO
Personnellement je clean seulement les noms de package en supprimant les "-", par exemple :
constellation.onUpdateStateObject(function (stateobject) {
	$scope.$apply(function () {
		var safePackageName = stateobject.PackageName.replace('-', '');
		if ($scope[safePackageName] == undefined) {
			$scope[safePackageName] = {};
		}			
		$scope[safePackageName][stateobject.Name] = message;		
	});
});
Par exemple, si j'ai un package nommé "S-Sound", j'aurai dans mon code {{ SSound.MonStateObject }} !

Bien sûr, on pourrait faire la même chose avec le nom des sentinelles bien que dans mon code si dessous je n’en tiens pas compte sinon j’aurai écrit quelque chose comme ca :

constellation.onUpdateStateObject(function (stateobject) {
	$scope.$apply(function () {
		var safeSentineName = stateobject.SentinelName.replace('-', '');
		if ($scope[safeSentineName] == undefined) {
			$scope[safeSentineName] = {};
		}	
		var safePackageName = stateobject.PackageName.replace('-', '');
		if ($scope[safeSentineName][safePackageName] == undefined) {
			$scope[safeSentineName][safePackageName] = {};
		}			
		$scope[safeSentineName][safePackageName][stateobject.Name] = message;		
	});
});

De facon à écrire dans notre template HTML {{ MaSentinelle.SSound.MonStateObject }}

Pour parfaire le truc, il faudrait faire une regex complete pour supprimer ou remplacer tous les caractères interdits (signe de ponctuation & co…).

Autrement, pour les noms de SO, je ne suis pas les modifier car on ne s’y retrouve plus !

Donc la pas le choix, si on constate qu’il y a des caractères spéciaux, on utilisera la syntaxe par indexeur !

CPU = {{ HWMonitor[’/intelcpu/0/load/0’].Value.Value }} %

ou en tenant compte des sentinelles

CPU = {{ MonPC.HWMonitor[’/intelcpu/0/load/0’].Value.Value }} %