2017-10-18 152 views
0

我正在嘗試爲現有項目使用節點紅色儀表板UI。其中我想使用'下拉'作爲選擇機制。我從SQLite數據庫中獲取'device'名稱和'device_id',並且使用了DEBUG消息來確保正確地發生。 根據儀表板下拉信息 -節點紅色儀表板 - 下拉列表問題

*「可以通過輸入包含數組的msg.options來配置選項,如果只是文本,則該值將與標籤相同,否則可以通過使用「值」 對: 「標籤」 的對象 例如 [ 「選擇1」, 「選擇2」,{ 「選擇3」: 「3」}]

我已經嘗試了各種方法來填充「選項'與期望的雙但是它不會出現按預期方式工作提到陣列以下代碼是使用函數節點的示例:


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中和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