我正在尝试创建自定义节点,我正在尝试非常简单的节点。我需要使用节点的属性,即用户从下拉列表中选择的值,使用msg.payload发送/输出该属性的值。
这是调试选项卡中的错误消息:
4/7/2017 21.45.06node: lolo
msg : error
"ReferenceError: $ is not defined"
这是所需的输出:
“ppp [lolo:m2]”
我删除了$ in js文件中的行,因为它无法识别jQuery。我改用
msg.payload = msg.payload +"[" + nodeName+":"+ node.axis +"]";
但是在输出中,选项值是未定义的,而不是选择下拉列表中的一个选项的值:
5/7/2017 11.34.22node: 5aa4aa59.f9fa04
msg.payload : string[19]
"ppp[lolo:undefined]"
这是节点的html文件:
<script type="text/javascript">
RED.nodes.registerType('Hello World',{
category: 'Demo',
color: '#ffaaaa',
defaults: {
name: {value:""},
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>
<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">-->
<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>
这是节点的js文件:
module.exports = function(RED) {
function helloWorld(config) {
RED.nodes.createNode(this,config);
//var context = this.context();
var nodeName = this.name;
var axis = config.axis;
var node = this;
//var $ = require('jQuery');
var x = $("#node-input-axis").val();
this.on('input', function(msg) {
msg.payload = msg.payload +"[" + nodeName+":"+ x +"]";
//{payload: nodeName+" "+node.axis};
node.send(msg);
});
//console.log(value);
}
RED.nodes.registerType("Hello World",helloWorld);
};
答案 0 :(得分:3)
重要的是要记住Node-RED节点的2个独立部分在不同的位置运行:
.js
文件在Node-RED的后端服务器端运行.html
文件在访问用户客户端计算机上的Node-RED Editor的Web浏览器中运行。这意味着.js
文件无法直接访问编辑器配置窗口中的字段,也无法访问jquery($
)表示法。
部署流时,所有配置变量都会传递到config
变量的后端。您已在以下位置访问该值:
var axis = config.axis;
所以var x = $("#node-input-axis").val();
可以使用axis
变量而不是node.axis
。
您无法使用config.axis
,因为在尝试使用this.axis
之前未将node.axis
绑定到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);
};
或matrix((length(M) - rank(M))/length(M), nrow=nrow(M), ncol=ncol(M))
e.g:
length(M)