节点外观

节点的外观有三个方面可以自定义:图标、背景颜色及其标签。

图标

节点的图标由其定义中的icon属性指定。

属性的值可以是字符串或函数。

如果该值为字符串,则用作图标。

如果该值是一个函数,它将在节点首次加载时或编辑后被调用执行。该函数预期返回用作图标的值。

该函数既会被工作区中的节点调用(此时this指向节点实例),也会被调色板中的节点条目调用。在后一种情况下,this不会指向特定节点实例,此时函数必须返回有效值。

...
icon: "file.svg",
...

图标可以是以下任意一种:

  • Node-RED提供的股票图标名称,
  • 模块提供的自定义图标名称,
  • 一个 Font Awesome 4.7 图标

股票图标

  • alert.svg
  • arrow-in.svg
  • bridge-dash.svg
  • bridge.svg
  • db.svg
  • debug.svg
  • envelope.svg
  • feed.svg
  • file.svg
  • function.svg
  • hash.svg
  • inject.svg
  • light.svg
  • serial.svg
  • template.svg
  • white-globe.svg

注意: 在Node-RED 1.0中,所有这些图标都已被SVG替代版本取代,以获得更好的显示效果。为确保向后兼容性,编辑器会自动将任何对png版本的请求替换为可用的SVG版本。

自定义图标

A node can provide its own icon in a directory called icons alongside its .js and .html files. These directories get added to the search path when the editor looks for a given icon filename. Because of this, the icon filename must be unique.

图标应为透明背景上的白色,宽高比为2:3,最小尺寸为40 x 60像素。

Font Awesome 图标

Node-RED包含完整的Font Awesome 4.7图标集

要指定一个FA图标,属性应采用以下形式:

...
icon: "font-awesome/fa-automobile",
...

用户自定义图标

用户可以在节点的编辑对话框的"外观"标签页中自定义单个节点的图标。

注意:如果节点在其defaults对象中包含icon属性,则其图标无法自定义。例如,node-red-dashboard中的ui_button节点。

背景颜色

节点的背景颜色是快速区分不同节点类型的主要方式之一。它由节点定义中的color属性指定。

...
color: "#a6bbcf",
...

我们使用了柔和的色调方案。新节点应尽量选择与此调色板协调的颜色。

以下是一些常用颜色:

  • #3FADB5
  • #87A980
  • #A6BBCF
  • #AAAA66
  • #C0C0C0
  • #C0DEED
  • #C7E9C0
  • #D7D7A0
  • #D8BFD8
  • #DAC4B4
  • #DEB887
  • #DEBD5C
  • #E2D96E
  • #E6E0F8
  • #E7E7AE
  • #E9967A
  • #F3B567
  • #FDD0A2
  • #FDF0C2
  • #FFAAAA
  • #FFCC66
  • #FFF0F0
  • #FFFFFF

标签

节点有四个标签属性:labelpaletteLabeloutputLabelinputLabel

节点标签

工作区中节点的label可以是静态文本,也可以根据节点属性动态设置每个节点的标签。

属性的值可以是字符串或函数。

如果该值是字符串,则用作标签。

如果该值是一个函数,它将在节点首次加载时或编辑后被调用执行。该函数预期会返回一个用作标签的值。

如前一节所述,节点通常具有name属性以便区分。以下示例展示了如何设置label来获取该属性的值,或默认使用合理的值。

...
label: function() {
    return this.name||"lower-case";
},
...

请注意,无法在标签函数中使用credential属性。

调色板标签

默认情况下,节点类型会作为其在面板中的标签显示。可通过paletteLabel属性来覆盖此默认设置。

label类似,该属性可以是字符串或函数。如果是函数,则在节点添加到面板时评估一次。

标签样式

标签的CSS样式也可以通过labelStyle属性动态设置。目前,该属性必须指定要应用的CSS类。如果未指定,将使用默认的node_label类。另一个预定义的类是node_label_italic

以下示例展示了当name属性已设置时,如何将labelStyle设置为node_label_italic

...
labelStyle: function() {
    return this.name?"node_label_italic":"";
},
...

对齐

默认情况下,节点中的图标和标签是左对齐的。对于位于流程末端的节点,惯例是将内容右对齐。这可以通过在节点定义中将align属性设置为right来实现:

...
align: 'right',
...

端口标签

节点可以在其输入和输出端口上提供标签,将鼠标悬停在端口上即可查看。

These can either be set statically by the node’s html file

...
inputLabels: "parameter for input",
outputLabels: ["stdout","stderr","rc"],
...

或者由函数生成,该函数接收一个索引参数来指示输出引脚(从0开始计数)。

...
outputLabels: function(index) {
    return "my port number "+index;
}
...

在这两种情况下,用户都可以通过配置编辑器中的node settings部分来覆盖这些设置。

注意: 标签不是动态生成的,也不能通过msg属性来设置。

按钮

一个节点可以在其左侧或右侧边缘设置按钮,如核心的Inject和Debug节点所示。

一个关键原则是编辑器并非用于控制流程的仪表板。因此,通常情况下节点上不应设置按钮。Inject和Debug节点属于特殊情况,因为它们的按钮在流程开发过程中具有特定作用。

button 属性在其定义中用于描述按钮的行为。它至少必须提供一个 onclick 函数,该函数将在按钮被点击时调用。

...
button: {
    onclick: function() {
        // Called when the button is clicked
    }
},
...

该属性还可以定义一个enabled函数,用于根据节点的当前配置动态启用和禁用按钮。同样地,它可以定义一个visible函数来决定是否应该显示该按钮。

...
button: {
    enabled: function() {
        // return whether or not the button is enabled, based on the current
        // configuration of the node
        return !this.changed
    },
    visible: function() {
        // return whether or not the button is visible, based on the current
        // configuration of the node
        return this.hasButton
    },
    onclick: function() { }
},
...

button 也可以配置为切换按钮 - 就像调试节点那样。这是通过添加一个名为 toggle 的属性来实现的,该属性标识了节点 defaults 对象中应该用于存储布尔值的属性,每当按下按钮时该布尔值就会被切换。

...
defaults: {
    ...
    buttonState: {value: true}
    ...
},
button: {
    toggle: "buttonState",
    onclick: function() { }
}
...