NodeRed 从先前节点输出的 msg 有效负载填充节点表单
NodeRed populate node form from msg payload from previous node output
我有几个自定义节点可以连接到 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(如果可能的话),它会显示一个 select 框,其中只有名字是基于进入其中的 msg 有效负载。 ....是否可以在 .on("input") 收到消息时动态更改 html?
<script type="text/html" data-template-name="some-binding">
template something here based on a template/data binding??
</script>
不,您不能根据前面节点的输入更改显示的设置。
此外,每个节点配置都应独立于任何其他节点,但它们可以共享配置节点。节点不需要知道流中的哪些节点 preceed/postceed(诸如 http-in/http-out 通过将响应对象附加到 msg
来解决这个问题)
你要明白节点的2个部分(HTML, JS)是完全独立的。 HTML部分运行在浏览器中,JS部分运行在后端。后端无权访问 HTML 部分。
同样值得记住的是,如果你从一个空白 canvas 开始并添加你的第一个节点,然后添加第二个节点并将它们连接在一起,在你点击部署之前它们之间不会有任何消息传递,所以会有第一个节点无法填充第二个节点。
虽然您可以选择使用附加到消息的数据覆盖 HTML 中输入的设置,但无法将此数据保存到流的已保存状态。
如果您的节点配置依赖于某些后端系统,那么您可以从 HTML 部分中发出 HTTP 请求以请求每个节点的数据,您可以在 onEditPrepare
回调,或者您可以将事件处理程序附加到 HTML 表单中的项目以按需执行此操作,例如到按钮。如果需要,您可以将 HTTP 路由添加到可以从 HTTP 调用的 JS 文件,以解决跨站点访问问题。以串行端口核心节点为例。
我有几个自定义节点可以连接到 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(如果可能的话),它会显示一个 select 框,其中只有名字是基于进入其中的 msg 有效负载。 ....是否可以在 .on("input") 收到消息时动态更改 html?
<script type="text/html" data-template-name="some-binding">
template something here based on a template/data binding??
</script>
不,您不能根据前面节点的输入更改显示的设置。
此外,每个节点配置都应独立于任何其他节点,但它们可以共享配置节点。节点不需要知道流中的哪些节点 preceed/postceed(诸如 http-in/http-out 通过将响应对象附加到 msg
来解决这个问题)
你要明白节点的2个部分(HTML, JS)是完全独立的。 HTML部分运行在浏览器中,JS部分运行在后端。后端无权访问 HTML 部分。
同样值得记住的是,如果你从一个空白 canvas 开始并添加你的第一个节点,然后添加第二个节点并将它们连接在一起,在你点击部署之前它们之间不会有任何消息传递,所以会有第一个节点无法填充第二个节点。
虽然您可以选择使用附加到消息的数据覆盖 HTML 中输入的设置,但无法将此数据保存到流的已保存状态。
如果您的节点配置依赖于某些后端系统,那么您可以从 HTML 部分中发出 HTTP 请求以请求每个节点的数据,您可以在 onEditPrepare
回调,或者您可以将事件处理程序附加到 HTML 表单中的项目以按需执行此操作,例如到按钮。如果需要,您可以将 HTTP 路由添加到可以从 HTTP 调用的 JS 文件,以解决跨站点访问问题。以串行端口核心节点为例。