NodeRed从上一个节点输出的消息有效载荷填充节点窗体



我有几个自定义节点,它们可以连接到Web服务,用原子ID提取数据。我想用一个节点拉入所有项目(json有效载荷数组(,添加到msg有效载荷中,并使用该有效载荷.on("input"(在第二个节点的html中填充配置表单。

module.export = (RED) => {
let data = [];
const getAllNode = () => {
// promised data returned 
data = service.getAllData(config);
let node = this;
RED.nodes.createNode(node, config);
node.on('input', (msg) => {
// simple pseudo but this part works fine
msg.payload = data;
node.send(msg);
})
}
RED.nodes.registerType("get-all", getAllNode);
}

根据msg.payload属性设置数据,类似于

[
{ first: "Bob", last: "Smith", age: 45, id: 241 },
{ first: "Karen", last: "NotThatKaren", age: 32, id: 112 },
{ first: "Latisha", last: "Rhodes", age: 41, id: 742 }
]

在下一个节点中,我想设置一个html(如果可能的话(,它将根据传入的msg有效载荷显示一个只有名字的选择框……当.on("input"(接收到msg时,这可能动态更改html吗?

<script type="text/html" data-template-name="some-binding">
template something here based on a template/data binding??
</script>

否,您不能根据上一个节点的输入更改显示的设置。

此外,除了可以共享配置节点之外,每个节点的配置都应该独立于任何其他节点。节点不需要知道流中的前向/后向节点(比如http-in/http-out,通过将响应对象附加到msg来绕过这一点(

您必须理解,节点的两个部分(HTML、JS(是完全独立的。HTML部分在浏览器中运行,JS部分在后端运行。后端无法访问HTML部分。

同样值得记住的是,如果你从一个空白画布开始,添加你的第一个节点,然后添加第二个节点,并将它们连接在一起,在你点击deploy之前,它们之间不会有消息传递,所以第一个节点将无法填充第二个。

虽然您可以选择用附加到消息的数据覆盖在HTML中输入的设置,但无法将这些数据保持到流的保存状态。

如果您的节点的配置依赖于某个后端系统,那么您可以从HTML部分发出HTTP请求,以请求每个节点的数据,您可以在onEditPrepare回调中发出这些请求,也可以将事件处理程序附加到HTML表单中的项目,以按需执行此操作,例如按钮。如果需要,您可以将HTTP路由添加到JS文件中,该文件可以从HTTP调用,以解决跨站点访问问题。有关示例,请参见"串行端口"核心节点。

相关内容

  • 没有找到相关文章

最新更新