javascript - 如何在 NodeRED 中创建自定义注入节点?
问题描述
我想通过单击按钮来启动我的节点,这样我就不必将注入节点放在前面。那怎么可能在javascript文件中注册一个按钮点击?
我试图放入node.on("input", async function(msg){/*some code*/})
我注册节点的 javascript 文件中。我可以通过这个添加这个按钮:
//HTML file script
<script type="text/javascript">
RED.nodes.registerType('light', {
category: "input",
color: "#f3c12b",
defaults: {
name: {value: ""},
plus: {value: ""},
topic: {value: this.name},
payload: {value: ""}
},
inputs: 0,
outputs: 1,
label: function(){
return "Licht '"+this.name+"'" || "Licht";
},
button: {
enabled: function(){
return true;
},
onclick: function(){
//I´ve put the code here, but then I have to reconfigure my functions
}
}
});
</script>
//Javascript file --> register function
//Not getting any response
node.on("input", async function(msg) {
msg = {};
msg.topic = this.topic;
msg.payload = "This is a new message!";
node.send(msg);
});
我期待,当我单击此节点时,节点正在发送消息,但节点没有响应任何内容。
解决方案
最好的办法是查看注入节点源代码。 注入.html 注入 .js
在注入节点的情况下,HTML 文件中按钮参数的 onclick 函数实际上是/inject/{id}
在服务器上进行 POST 调用。
onclick: function() {
...
var node = this;
$.ajax({
url: "inject/"+this.id,
type:"POST",
success: function(resp) { ... }
});
}
在服务器上运行的注入 JS 文件托管一个 http 端点/inject/:id
,当它被调用时,它通过 id 获取节点并被调用node.receive()
,它充当其输入的触发器。
module.exports = function(RED) {
...
RED.httpAdmin.post("/inject/:id", RED.auth.needsPermission("inject.write"), function(req,res) {
var node = RED.nodes.getNode(req.params.id);
...
node.receive();
...
});
}
推荐阅读
- java - Java如何将可变参数传递给另一个函数,如 Paths.get()
- spring - 如何将 Spring 执行器指标用于非 Spring 应用程序
- azure - Azure 服务总线 - 锁定持续时间和重复,它们有什么关系?
- unix - 尝试在 Unix 机器上运行量角器测试时出现“E/launcher - 错误:产生 EACCES”错误
- stata - 定时器解释
- macos - MacOS 在未激活的窗口中单击会导致它移动
- sql - 在具有父子范围的单个查询中查找所有父项
- apache - 当我在 htaccess 中有代码时未启用 GZIP - 如何启用它?
- c# - 如何在ffmpeg中的特定帧之后添加图像
- c# - 如果没有被其他撇号包围,则替换撇号