节点红色自定义节点,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();
});
答案 0 :(得分:1)
解决此问题的通常方法是定义一个regular node property来存储选择内容。这样每个节点都可以拥有自己的选择值。
是的,这意味着您需要在oneditprepare
中包含一些代码才能设置从动态生成的列表中选择的值-但这只是完成的工作;这不成问题'。此外,如果要使用全局变量,则必须具有一些代码来完成相同的任务。