Hi there,
I'm currently working with NR 4.0.2 and @flowfuse/node-red-dashboard:1.16.0
I'm aiming to have a button in a template node that sends back a msg.payload when I click it. Following the documentation DOC , I used this.send() function to pass on data back into Node-RED.
However I must be missing something because I recieve the data when this.send is directly on the script (page's first load), but when it's inside an event listener, the browser's console returns that send is not defined.
I leave here the code im using so you can test it:
Flow
[
{
"id": "722d8da36de071df",
"type": "ui-template",
"z": "f6f2187d.f17ca8",
"group": "71a95203ce9df61e",
"page": "",
"ui": "",
"name": "Button",
"order": 1,
"width": "6",
"height": "4",
"head": "",
"format": "<template>\n <button id=\"test-btn\" class=\"test-btn\" >My Button</button>\n</template>\n\n<script>\n document.getElementById(\"test-btn\").addEventListener(\"click\", function() {\n var data1 = \"AA\";\n var data2 = \"BB-1\";\n var msg = {payload: {'data1': data1, 'data2': data2}};\n this.send(msg);\n });\n this.send('ScriptOn');\n</script>\n\n<style>\n /* define any styles here - supports raw CSS */\n .test-btn {\n background-color: #f54;\n color: white;\n border: none;\n padding: 10px;\n border-radius: 5px;\n cursor: pointer;\n }\n</style>",
"storeOutMessages": true,
"passthru": true,
"resendOnRefresh": true,
"templateScope": "local",
"className": "",
"x": 178,
"y": 424,
"wires": [
[
"fd077dd87df6d242"
]
]
},
{
"id": "fd077dd87df6d242",
"type": "debug",
"z": "f6f2187d.f17ca8",
"name": "debug 2",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 428,
"y": 424,
"wires": []
},
{
"id": "71a95203ce9df61e",
"type": "ui-group",
"name": "Group Name",
"page": "9ef10008cf9bd85d",
"width": "6",
"height": "1",
"order": 1,
"showTitle": true,
"className": "",
"visible": "true",
"disabled": "false"
},
{
"id": "9ef10008cf9bd85d",
"type": "ui-page",
"name": "TEST",
"ui": "99b0f7213609f95f",
"path": "/page3",
"icon": "home",
"layout": "grid",
"theme": "7595dc06ddd9d219",
"order": 4,
"className": "",
"visible": "true",
"disabled": "false"
},
{
"id": "99b0f7213609f95f",
"type": "ui-base",
"name": "MES",
"path": "/dashboard",
"includeClientData": true,
"acceptsClientConfig": [
"ui-notification",
"ui-control"
],
"showPathInSidebar": false,
"showPageTitle": false,
"navigationStyle": "none",
"titleBarStyle": "hidden"
},
{
"id": "7595dc06ddd9d219",
"type": "ui-theme",
"name": "MA_Theme",
"colors": {
"surface": "#bababa",
"primary": "#e40521",
"bgPage": "#111111",
"groupBg": "#3c3c3b",
"groupOutline": "#3c3c3b"
},
"sizes": {
"density": "default",
"pagePadding": "12px",
"groupGap": "12px",
"groupBorderRadius": "10px",
"widgetGap": "12px"
}
}
]
Template content:
<template>
<button id="test-btn" class="test-btn" >My Button</button>
</template>
<script>
document.getElementById("test-btn").addEventListener("click", function() {
var data1 = "AA";
var data2 = "BB-1";
var msg = {payload: {'data1': data1, 'data2': data2}};
this.send(msg);
});
this.send('ScriptOn');
</script>
<style>
/* define any styles here - supports raw CSS */
.test-btn {
background-color: #f54;
color: white;
border: none;
padding: 10px;
border-radius: 5px;
cursor: pointer;
}
</style>
Hope some of you could help me with that, thanks!