【问题标题】:node-red dashboard - dropdown list problems节点红色仪表板 - 下拉列表问题
【发布时间】:2017-10-19 20:00:47
【问题描述】:

我正在尝试将节点红色仪表板 ui 用于现有项目。在其中,我想使用“下拉菜单”作为选择机制。我从 SQLite 数据库中获取了“设备”名称和“设备 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;

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

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

【问题讨论】:

  • 您没有看到下拉菜单,因为您的代码输出不是您想要的?
  • @user2917823 很容易忘记其他人没有经历过思考过程。道歉。下面的答案准确地解释了我做错了什么,即使我的解释缺乏描述。

标签: user-interface dropdown dashboard node-red


【解决方案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;

【讨论】:

  • 请添加一些解释以配合您的代码
  • 谢谢您 - 太棒了,感谢您的耐心和贡献。我不知道我为什么遇到这样的麻烦。我把它归结为我现在进步的岁月!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多