【问题标题】:How do I make a node-red node that is already on a flow obey the default values of a newly-added property?如何使已经在流上的节点红色节点服从新添加属性的默认值?
【发布时间】:2022-06-13 14:33:48
【问题描述】:

最初,这是我的节点配置。

RED.nodes.registerType('HelloWorld', {
  category: 'HelloWorld',
  defaults: {
    firstProp: {value: false}
  },
}

然后将此helloworld 节点放置在流上。

然后,我在配置中添加了另一个属性 secondProp 并重新启动 node-red。

RED.nodes.registerType('HelloWorld', {
  category: 'HelloWorld',
  defaults: {
    firstProp: {value: false}
    secondProp: {value: true}
  },
}

当我导出流时,我注意到 secondProp 设置为 false。我原以为它会设置为默认值 true

[
{
    "id": "04abe6r5baqs16dc",
    ...
    "firstProp": false,
    "secondProp": false, //expected it to be true
    "x": 290,
    "y": 360
}
]

我可以知道如何解决这个问题并确保流上的现有自定义节点遵守新添加属性的默认值吗?

注意:

当我拉出自定义节点并将其放在流上时,它没有这个问题,即secondProp 的值是true

【问题讨论】:

  • 这不是预期的行为,可能是一个错误。您能否在 github 上提出问题,以便我们进行适当的调查?

标签: javascript node-red


【解决方案1】:

node-red 维护者之一commented

流文件不会因为你修改了自定义节点src而被修改。您必须在oneditprepare 中处理任何就地升级。据我所知,这是正常行为。

所以作为一种解决方法,我们只能这样做

RED.nodes.registerType('HelloWorld', {
  category: 'HelloWorld',
  defaults: {
    firstProp: {value: false}
  },
  oneditprepare: {
    if (this.secondProp === undefined) {
      this.secondProp = true;
    }
  }
}

请注意,这需要我们打开节点的编辑对话框才能生效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多