2017-10-18 44 views
0

既存のプロジェクトにnode-redダッシュボードuiを使用しようとしています。その中で私は選択メカニズムとして 'ドロップダウン'を使いたいと思っています。私は 'device'という名前と 'device_id'をSQLiteデータベースから取得していますが、これが正しく行われていることを確認するためにDEBUGメッセージを使用しています。 ダッシュボードごとのドロップダウン情報 -ノード赤いダッシュボード - ドロップダウンリストの問題

* "オプションは、配列を含むmsg.optionsを入力することで設定できます。テキストだけの場合、値はラベルと同じになります。そうでない場合は、 "値" のペア: "ラベル" のオブジェクト 例えば [ "選択肢1"、 "選択肢2"、{ "選択肢3": "3"}] I「はオプションを設定するために様々な方法を試みた

配列は期待通りに動作していませんが、期待通りに動作していません。次のコードは、関数ノードを使用した例です:



(NB。それは、単一の行の割り当て内解析を行いませんので、TEMP1とTEMP2がある)

が、これは、デバッグウィンドウで、次のオブジェクトを生成します!

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 

。 。 。 誰かが私がどこに間違って行くのか教えてもらえますか? おかげ

+0

あなたのコードの出力はあなたが望むものではないので、ドロップダウンが表示されていませんか? – user2917823

+0

@ user2917823他人が思考過程を経なかったことを忘れるのは簡単です。謝罪。私の説明が記述に欠けていても、私が間違っていたことを以下の答えで正確に説明しています。 – user2307189

答えて

1

あなたがオブジェクト{temp2 : temp1}プロパティ名はtemp2になり、値がtemp1変数からになりますが作成しています。 プロパティを変数に反映させる場合は、[]表記を使用する必要があります。例えば

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

var obj = { 
    name : value 
} 

出力は{"name":20}

になります。しかし、あなたがオブジェクトがなる[]表記を使用する場合:

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

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

をオブジェクトは、あなたのためのよう{"foo":20} になりますコードを変更することができます:

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

あなたのコードに行くために少し説明を加えてください – hardillb

+0

ありがとうございます - それは素晴らしいです、私はあなたの忍耐と貢献に感謝します。なぜ私がそのような問題を抱えていたのか分かりません。私はそれを私の今の進歩する年に置いている! – user2307189

関連する問題