我正在尝试将节点红色仪表板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
。 。 。 谁能告诉我哪里出错? 感谢
答案 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;