节点RED自定义节点,在下拉列表中填充动态值。在打开的节点上显示选定的值。支持相同类型的多个节点

时间:2018-07-20 18:33:13

标签: drop-down-menu node-red

节点红色自定义节点,1下拉字段动态显示数据库中的值。 用户可以选择任何值并保存节点。 当用户重新打开同一节点时,下拉菜单应显示先前选择的值。 它仅在一个节点上工作。 但是,如果我们放置多个相同类型的节点,则它在所有节点中都显示相同的值。

原因是存储选定值的全局变量在oneditprepare函数外部使用。 当用户想要使用许多相同类型的节点时,由于全局变量的存在,全局变量在不同的节点中显示相同的值。

如何解决此问题?

我也看着How to show the previously selected values(dynamic) on a dropdown after oneditsave in Node-Red?

相反,我认为下面是解决此问题的方法。 节点在侧栏信息中显示值。我们可以从中获取价值并将其分配给下拉列表。但是在那种情况下,问题是我们必须在oneditprepare中编写代码才能为下拉菜单分配值。

并且完全执行oneditpree后,补充工具栏属性才有价值。

谢谢。

以上描述的代码:

<div class="form-row">
      <label for="node-input-toolId"><i class="fa fa-tag"></i> Tool Id</label>
      <select id="node-input-toolId" style="width:125px !important" required>
                <option value=""></option>
      </select>
</div>



<script type="text/javascript">
var globalToolId;


defaults:{
    toolId: {value:"", required:true} // along with some other fields
}

oneditprepare:

// ajax call to database to fetch values
$.ajax({
    url: solrUrl,
    method: 'GET',
    dataType: "json",
    contentType: "application/json",
    success: function(data) {
        for(var i=0;i<list.length;i++) // Assume list has all values fetched from db
        {
            var dbVal = list[i];
            var newOption = $('<option value="'+dbVal+'">'+dbVal+'</option>'); // Add all values to the dropdown list
            $("#node-input-toolId").append(newOption);
        }

        // This will show default toolId selected previously
        if(globalToolId != null && globalToolId != '')
        {
            $("#node-input-toolId").val(globalToolId);
        }
    }
});

// On change of toolId2, save selected Tool Id in global variable.
$('#node-input-toolId2').change(function(e){
    globalToolId = $('#node-input-toolId').val();
});

1 个答案:

答案 0 :(得分:1)

解决此问题的通常方法是定义一个regular node property来存储选择内容。这样每个节点都可以拥有自己的选择值。

是的,这意味着您需要在oneditprepare中包含一些代码才能设置从动态生成的列表中选择的值-但这只是完成的工作;这不成问题'。此外,如果要使用全局变量,则必须具有一些代码来完成相同的任务。