节点红色仪表板 - 下拉列表问题

node-red dashboard - dropdown list problems

我正在尝试为现有项目使用节点红色仪表板 ui。其中我想使用 'dropdown' 作为选择机制。我从 SQLite 数据库中获取了 'device' 名称和 'device_id',并且我使用 DEBUG 消息来确保它正确发生。 根据仪表板下拉信息 --

*"The Options may be configured by inputting msg.options containing an array. If just text then the value will be the same as the label, otherwise you can specify both by using an object of "label":"value" 对: 例如 [ "Choice 1", "Choice 2", {"Choice 3": "3"}]

我尝试了各种方法来填充所提到的 'options' 数组,但它似乎没有按预期工作。以下代码是使用函数节点的示例:


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 是因为它不会在单行分配中解析!)

这会在调试中生成以下对象 window:

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

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

您正在创建一个对象 {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;