2017-07-05 3 views
0

Ich versuche, benutzerdefinierte Knoten zu erstellen, experimentiere ich mit sehr einfachen. Ich muss die Eigenschaft des Knotens verwenden, den Wert, der vom Benutzer aus einem Dropdown ausgewählt wurde, um den Wert dieser Eigenschaft mit msg.payload zu senden/auszugeben.Knoten-rot benutzerdefinierter Knoten, Wie wird die Knoteneigenschaft verwendet?

Dies ist die Fehlernachricht in dem Debug-Register:

4/7/2017 21.45.06node: lolo 
msg : error 
"ReferenceError: $ is not defined" 

Dies ist die gewünschte Ausgabe:

"ppp [lolo: m2]"

I die Zeile entfernen mit $ in js-Datei, weil jQuery nicht erkannt wird. Ich benutze diese stattdessen

msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]"; 

aber der Optionswert in der Ausgabe wird anstelle des Wertes von einer der Optionen aus ausgewählten Dropdown undefined:

5/7/2017 11.34.22node: 5aa4aa59.f9fa04 
msg.payload : string[19] 
"ppp[lolo:undefined]" 

Dies ist die HTML-Datei für den Knoten:

<script type="text/javascript"> 
 
    RED.nodes.registerType('Hello World',{ 
 
     category: 'Demo', 
 
     color: '#ffaaaa', 
 
     defaults: { 
 
      name: {value:""}, 
 
\t \t axis:{value:""} 
 
     }, 
 
     inputs:1, 
 
     outputs:1, 
 
     icon: "face.png", 
 
     label: function() { 
 
      return this.name||"Hello World"; 
 
     } 
 
    }); 
 
</script> 
 
<script type="text/x-red" data-template-name="Hello World"> 
 
    <div class="form-row"> 
 
     <label for="node-input-name"><i class="icon-tag"></i> Name</label> 
 
     <input type="text" id="node-input-name" placeholder="Name"> 
 
    </div> 
 
    <div class="form-row"> 
 
     <label for="node-input-topic"><i class="icon-tag"></i> Topic</label> 
 
     <input type="text" id="node-input-topic" placeholder="Topic"> 
 
    </div> 
 
\t <div class="form-row"> 
 
     <label for="node-input-axis"><i class="icon-tag"></i> Motor</label> 
 
     <!--<input type="text" id="node-input-axis" placeholder="axis">--> 
 
\t \t <select value="" id="node-input-axis" placeholder="axis"> 
 
      <option value="m1">m1</option> 
 
      <option value="m2">m2</option> 
 
      <option value="m3">m3</option> 
 
      <option value="m4">m4</option> 
 
     </select> 
 
    </div> 
 
</script> 
 
<script type="text/x-red" data-help-name="Hello World"> 
 
    <p>A node that increments every time a new message is received and sends Hello World in return.<br/> 
 
    </p> 
 
</script>

Dies ist js-Datei für den Knoten:

module.exports = function(RED) { 
 
    function helloWorld(config) { 
 
     RED.nodes.createNode(this,config); 
 
     //var context = this.context(); 
 
\t \t var nodeName = this.name; 
 
\t \t var axis = config.axis; 
 
     var node = this; 
 
\t \t //var $ = require('jQuery'); 
 
\t \t var x = $("#node-input-axis").val(); 
 
     this.on('input', function(msg) { 
 
\t \t \t msg.payload = msg.payload +"[" + nodeName+":"+ x +"]"; 
 
\t \t \t //{payload: nodeName+" "+node.axis}; 
 
\t \t \t node.send(msg); 
 
     }); 
 
\t \t //console.log(value); 
 
    } 
 
    RED.nodes.registerType("Hello World",helloWorld); 
 
};

Antwort

2

Es ist wichtig, sich daran zu erinnern, dass die zwei getrennten Teile eines Node-RED-Knoten laufen in sehr verschiedenen Orten:

  • Die .js Datei läuft auf der Backend-Server-Seite von Node-RED
  • Die Datei .html wird im Webbrowser ausgeführt, der auf den Node-RED-Editor auf dem Client des Benutzers zugreift in.

Dies bedeutet, dass die .js Datei auf die Felder im Editor Konfigurationsfenster keinen direkten Zugriff hat und auch gibt es keinen Zugang zu jquery ($) Notation.

Wenn ein Flow bereitgestellt wird, werden alle Konfigurationsvariablen an das Back-End in der Variablen config übergeben. Sie haben bereits Zugriff auf diesen Wert in:

var axis = config.axis; 

so statt der var x = $("#node-input-axis").val(); Sie nur die axis Variable verwenden können.

Sie können nicht node.axis verwenden, da Sie nicht config.axis entweder this.axis oder node.axis, bevor Sie versuchen, es zu benutzen

z.B .:

module.exports = function(RED) { 
    function helloWorld(config) { 
     RED.nodes.createNode(this,config); 
     //var context = this.context(); 
     var nodeName = this.name; 
     this.axis = config.axis; 
     var node = this; 

     this.on('input', function(msg) { 
      msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]"; 
      //{payload: nodeName+" "+ node.axis}; 
      node.send(msg); 
     }); 
     //console.log(value); 
    } 
    RED.nodes.registerType("Hello World",helloWorld); 
}; 
gebunden haben
Verwandte Themen