节点的编辑对话框是用户配置节点以实现所需功能的主要方式。
对话框应具有直观的使用体验,并在设计和外观上与其他节点保持一致。
编辑对话框在 节点的 HTML 文件 中提供,位于一个 <script> 标签内:
<script type="text/html" data-template-name="node-type">
<!-- 编辑对话框内容 -->
</script>
<script> 标签的 type 应为 text/html - 这将帮助大多数文本编辑器提供正确的语法高亮。它还可以防止浏览器在节点加载到编辑器时将其视为普通 HTML 内容。data-template-name 应设置为其编辑对话框对应的节点类型。这是编辑器在编辑特定节点时识别显示内容的方式。编辑对话框通常由一系列行组成,每行包含一个标签和一个不同属性的输入框。
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> 名称</label>
<input type="text" id="node-input-name" placeholder="名称">
</div>
form-row 的 <div> 创建。<label>,其中包含一个图标和属性名称,后面跟着一个 <input>。图标使用一个 <i> 元素创建,并从 Font Awesome 4.7 中获取类名。node-input-<propertyname> 的 id。对于配置节点,id 必须为 node-config-input-<property-name>。<input> 类型可以是用于字符串/数字属性的 text,或者用于布尔属性的 checkbox。或者,如果存在限制的选择集,可以使用 <select> 元素。Node-RED 提供一些标准的 UI 小部件,供节点使用,以创建更丰富和一致的用户体验。
要将按钮添加到编辑对话框,请使用标准 <button> HTML 元素,并赋予它 class red-ui-button。
普通按钮 |
<button type="button" class="red-ui-button">按钮</button> |
小按钮 |
<button type="button" class="red-ui-button red-ui-button-small">按钮</button> |
切换按钮组 |
<span class="button-group"> <button type="button" class="red-ui-button toggle selected my-button-group">b1</button><button type="button" class="red-ui-button toggle my-button-group">b2</button><button type="button" class="red-ui-button toggle my-button-group">b3</button> </span> HTML $(".my-button-group").on("click", function() {
$(".my-button-group").removeClass("selected");
$(this).addClass("selected");
})
oneditprepare 要在活动按钮上切换 注意: 避免在 |
对于简单的文本输入,可以使用标准的 <input> 元素。
在某些情况下,Node-RED 提供 TypedInput 小部件作为替代方案。它允许用户指定属性的类型及其值。
例如,如果一个属性可以是字符串、数字或布尔值。或者如果该属性用于标识消息、流或全局上下文属性。
这是一个 jQuery 小部件,需要在节点的 oneditprepare 函数中添加代码以将其添加到页面。
TypedInput 小部件的完整 API 文档,包括可用内置类型的列表,可以在 这里 找到。
普通 HTML 输入 |
<input type="text" id="node-input-name"> |
TypedInput
|
<input type="text" id="node-input-example1"> <input type="hidden" id="node-input-example1-type"> HTML $("#node-input-example1").typedInput({
type:"str",
types:["str","num","bool"],
typeField: "#node-input-example1-type"
})
oneditprepare 当 TypedInput 可以设置为多种类型时,需要额外的节点属性来存储关于该类型的信息。这个属性作为一个隐藏的<input> 添加到编辑对话框中。
|
TypedInput
|
<input type="text" id="node-input-example2"> HTML $("#node-input-example2").typedInput({
type:"json",
types:["json"]
})
oneditprepare JSON 类型包括一个按钮,可以打开一个专用的 JSON 编辑对话框(在此演示中禁用)。 |
TypedInput
|
<input type="text" id="node-input-example3"> <input type="hidden" id="node-input-example3-type"> HTML $("#node-input-example3").typedInput({
type:"msg",
types:["msg", "flow","global"],
typeField: "#node-input-example3-type"
})
oneditprepare |
TypedInput
|
<input type="text" id="node-input-example4"> HTML $("#node-input-example4").typedInput({
types: [
{
value: "fruit",
options: [
{ value: "apple", label: "苹果"},
{ value: "banana", label: "香蕉"},
{ value: "cherry", label: "樱桃"},
]
}
]
})
oneditprepare |
TypedInput
|
<input type="text" id="node-input-example5"> HTML $("#node-input-example5").typedInput({
types: [
{
value: "fruit",
multiple: "true",
options: [
{ value: "apple", label: "苹果"},
{ value: "banana", label: "香蕉"},
{ value: "cherry", label: "樱桃"},
]
}
]
})
oneditprepare 多选框的结果值是所选选项的以逗号分隔的列表。
|
Node-RED 包括一个基于 Ace 代码编辑器 的多行文本编辑器,或者如果通过用户设置启用,则为 Monaco 编辑器
多行文本编辑器
在以下示例中,我们要编辑的节点属性名为 exampleText。
在您的 HTML 中,添加一个 <div> 占位符作为编辑器。这必须具有 css 类 node-text-editor。您还需要在该元素上设置 height。
<div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-example-editor"></div>
在节点的 oneditprepare 函数中,使用 RED.editor.createEditor 函数初始化文本编辑器:
this.editor = RED.editor.createEditor({
id: 'node-input-example-editor',
mode: 'ace/mode/text',
value: this.exampleText
});
oneditsave 和 oneditcancel 函数也需要在对话框关闭时从编辑器获取值,并确保编辑器正确从页面中移除。
oneditsave: function() {
this.exampleText = this.editor.getValue();
this.editor.destroy();
delete this.editor;
},
oneditcancel: function() {
this.editor.destroy();
delete this.editor;
},
版权所有 OpenJS Foundation 和 Node-RED 贡献者。保留所有权利。OpenJS Foundation 拥有并使用注册商标。有关 OpenJS Foundation 的商标列表,请参阅我们的 商标政策 和 商标列表。未在 OpenJS Foundation 商标列表 中列出的商标和徽标是其各自持有者的商标™或注册商标®。使用它们并不意味着与它们有任何关联或认可。
OpenJS Foundation | 使用条款 | 隐私政策 | OpenJS Foundation 章程 | 商标政策 | 商标列表 | Cookie 政策