节点红色仪表板 - 下拉列表问题
我正在尝试为现有项目使用节点红色仪表板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
。 。 。 任何人都可以告诉我我要去哪里吗? 感谢
您创建了一个对象{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;
请添加一些解释以及您的代码 – hardillb
谢谢 - 这很棒,我感谢您的耐心和贡献。我不知道我为什么会遇到这样的麻烦。我正在把它放到我现在前进的几年! – user2307189
您没有看到下拉列表,因为您的代码输出不是您想要的输出吗? – user2917823
@ user2917823很容易忘记其他人没有经过思考过程。道歉。下面的答案解释了我做错了什么,即使我的解释缺乏描述。 – user2307189