2017-10-18 57 views
0

J'essaie d'utiliser l'interface utilisateur de tableau de bord rouge-nœud pour un projet existant. Au sein de ce que je veux utiliser la «liste déroulante» comme un mécanisme de sélection. J'obtiens le nom 'device' et 'device_id' d'une base de données SQLite, et j'ai utilisé les messages DEBUG pour m'assurer que cela se passe correctement. Selon les informations du menu déroulant Tableau de bord -tableau de bord nœud-rouge - problèmes de liste déroulante

* "Les options peuvent être configurées en entrant des options msg contenant un tableau.Si juste du texte, la valeur sera la même que l'étiquette, sinon vous pouvez spécifier les deux en utilisant un objet de "label": "valeur" paires: par exemple [ "choix 1", "Choix 2", { "Choix 3": "3"}]

J'ai essayé différentes méthodes pour remplir les « options 'tableau mentionné avec les paires souhaitées mais il ne semble pas fonctionner comme prévu.Le code suivant est un exemple utilisant un nœud de fonction:


var newmsg = msg; 
newmsg.options = []; 
var temp1, temp2; 
for (var i = 0; i < msg.payload.length; i++) { 
    temp1 = msg.payload[i].id; 
    temp2 = msg.payload[i].name; 
    newmsg.options[i] = {temp2 : temp1}; 
} 
return newmsg; 

(NB. temp1 et temp2 sont parce qu'il ne sera pas analyser au sein de l'attribution d'une seule ligne)

ce produit les objets suivants dans la fenêtre de débogage:

topic: "select name, id from devices where 1;" 
payload: array[186] 
[0 … 9] 
    0: object 
    name: "Ron" 
    id: 29 
    1: object 
    name: "Deck Motion TRx" 
    id: 51 
. 
. 
. 
options: array[186] 
    [0 … 9] 
    0: object 
     temp2: 29 
    1: object 
     temp2: 51 
    2: object 
     temp2: 54 

. . . Quelqu'un peut-il me dire où je vais mal ?? Merci

+0

Vous ne voyez pas de liste déroulante si la sortie de votre code n'est pas celle que vous désirez? – user2917823

+0

@ user2917823 Il est facile d'oublier que d'autres ne sont pas passés par la réflexion. Excuses. La réponse ci-dessous explique exactement ce que je faisais mal même si mon explication manquait de description. – user2307189

Répondre

1

Vous créez un objet {temp2 : temp1} le nom de la propriété sera temp2 et la valeur sera de la variable temp1. Si vous voulez nommer une propriété pour refléter une variable, vous devez utiliser la notation [].

Par exemple:

var name = "foo"; 
var value = 20; 

var obj = { 
    name : value 
} 

La sortie sera {"name":20}

Mais si vous utilisez la notation [] l'objet sera:

var name = "foo"; 
var value = 20; 

var obj = {}; 
obj[name] = value; 

L'objet sera {"foo":20} Quant à votre code, vous pouvez le changer comme ceci:

var newmsg = msg; 
newmsg.options = []; 
var temp1, temp2; 
for (var i = 0; i < msg.payload.length; i++) { 
    temp1 = msg.payload[i].id; 
    temp2 = msg.payload[i].name; 
    newmsg.options[i] = {}; 
    newmsg.options[i][temp2] = temp1; 

} 
return newmsg; 
+0

S'il vous plaît ajouter une petite explication pour aller avec votre code – hardillb

+0

Merci - c'est génial, j'apprécie votre patience et votre contribution. Je ne sais pas pourquoi j'avais de tels problèmes. Je le mets à mes années qui avancent maintenant !! – user2307189