Casse tête Javascript?

Salut

Je maj mes widgets custom en v4.3 mais je ne m’explique pas pourquoi mon code qui fonctionnait avant ne fonctionne plus?

      jeedom.cmd.addUpdateFunction('#id#',function(_options)
      {
        var ls = #enumLabels# ;
        var is = #enumIndex# ;
        let val = _options.display_value;	
        let cmd = $('.cmd[data-cmd_id=#id#]');
        let labels=[]; labels = ls.split(',');        
        let index=[]; index = is.split(',');
		let i = index.indexOf(val);
		cmd.find('.value').empty().append('val='+val+' i='+i+' is='+is); // labels[i]);

voila les valeurs des paramètres. J’ai été obligé de mettre les ’ ’ car Jeedom n’envoyait pas la string sinon

#enumLabels# = 'Low,Medium,High'
#enumLabels#= '90,92,93'

Au 1er appel tout va bien je récupère la bonne valeur:
val=91 i=0 is=91,92,93
mais au refresh i vaut -1??
val=92 i=-1 is=91,92,93
Au début j’ai cru que c’était un pb de récupération des paramètres mais en fait non ca serait un problème javascript??

Je n’arrive pas a comprendre ce qui cloche: c’est la chaleur qui me joue des tours?

Merci de votre aide!

hello,

peut être un probleme de typage? (string/integer)

let index=[]; index = String(is).split(',').map(Number);

ton code m’a l’air bon, je vois que ça à première vue (ou le mix de l’utilisation entre var et let mais ça serait étrange dans ton cas)

Merci pour ton retour. Oui j’ai fait plein d’essais dont le scope des variables.
J’ai imprimé chaque élément du tableau mais je n’ai pas pensé à vérifier le type
C’est quand même dingue que ca marche plus a partir de la 2e exécution ?
[EDIT] bon j’ai dormi un peu et trouvé mon problème: val est de type int pas string…ceci dit typeof me renvoie string a la 2ere execution, va savoir pourquoi…

Bonsoir,

Une piste :

Lors du 1er affichage est-ce bien toi qui envoie _options.display_value par la fonction refreshValue ? si oui comment est formaté la fonction ? as-tu supprimé les ' ' autour de #state#, car dans ce cas se sera bien un int sinon un string.

C’est sans doute a cause du subType, si tu utilise une commande info/Autre ce sera un string qui sera envoyé par le core, en revanche si ta commande est de type info/Numérique se sera un int

Edit : Etant dans la maj de tes widget, je ne peut que te conseiller de te débarrasser de jQuery et ainsi faire du fullJs, ainsi ceux-ci seront déja prêt lorsque le core passera en fullJs dans un futur (lointain :wink:)

Le widget était effectivement de type numeric et il n’y avait pas de ‘ ‘ ca n’aurait jamais du marcher mais pourtant si…va savoir pourquoi. Merci pour tes conseils

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.