node-red dashboard - 下拉列表问题

时间:2017-10-18 22:35:00

标签: user-interface dropdown dashboard node-red

我正在尝试将节点红色仪表板ui用于现有项目。在其中,我想使用'下拉'作为一种选择机制。我获得了'设备'姓名和' device_id'从SQLite数据库,我已经使用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;

(注意.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

。 。 。 谁能告诉我哪里出错? 感谢

1 个答案:

答案 0 :(得分: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;