javascript - 红色 Node 在管理 UI 中获取配置 Node 值

标签 javascript node.js node-red

这可能是错误的方法,但基本上我想创建一个 Node ,其中下拉列表之一取决于配置 Node 值。

config-test.html

<script type="text/javascript">
    RED.nodes.registerType('test-config', {
        category: 'config',
        defaults: {
            token: { value: '' }
        }
    });
</script>

<script type="text/x-red" data-template-name="test-config">
    <div class="form-row">
        <label for="node-config-input-token"><i class="icon-tag"></i> Token</label>
        <input type="text" id="node-config-input-token" placeholder="Token">
    </div>
</script>

config-test.js

module.exports = function (RED) {
    function TestConfig(config) {
        RED.nodes.createNode(this, config);
        this.token = config.token;
    }
    RED.nodes.registerType('test-config', TestConfig);
}

那么在新 Node 中我想这样做:

test-node.html

<script type="text/javascript">
    RED.nodes.registerType('test-node', {
        defaults: {
            token: { value: '', type: 'test-config' },
            node: { value: '' }
        },
        oneditprepare: function () {
            var token = ??????;
            var nodes = $('#node-input-node');

            reloadNodeSelect();

            function reloadNodeSelect() {
                $.ajax({
                    url: '--URL--' + token
                    success: function (res) {
                        nodes.html('');
                        for (var i = 0; i < res.obj.length; i++) {
                            nodes.append($('<option></option>').attr('value', res.obj[i]).text(res.obj[i]));
                        }
                    }
                });
            }
        }
    });
</script>

<script type="text/x-red" data-template-name="temp-node">
    <div class="form-row">
        <label for="node-input-node"><i class="icon-tag"></i> Node</label>
        <select type="text" id="node-input-node"></select>
    </div>
</script>

情况是,有一个 API 使用 token 和对 Node 列表的 Web 请求,每个 Node 都有自己的单独 token ,API 需要针对该特定 Node 的请求。我想列出每个 Node 还有几个附加子项,并允许用户为给定的测试 Node 进行选择。每个 Node 的配置差异很大,使用这些附加选项创建配置 Node 似乎没有意义。

显然, token 可以仅作为测试 Node 上的文本字段提供,但其想法是限制重复量并使目标用户的配置更加简化。

使用console.log(this); oneditprepare() 函数内部有一个 token 属性值,但它是一个似乎指向配置 Node 的 ID。但我找不到一种方法来使用它来获取该 Node 的值。

token :“5a1ab56c.5e478c”

我已经尝试过 RED.nodes.getNode() 但此方法仅在运行时 API 中可用:http://nodered.org/docs/api/runtime/api#getNode

谢谢!

最佳答案

为此,您需要在运行时端的配置对话框 HTML 和 Nodejs 代码之间实现自己的通信。执行此操作的正常方法是在 Nodejs 代码中添加 HTTP 端点,并对该端点进行 AJAX 样式调用以填充下拉列表。

node-red-nodes中有一些类似的例子git 存储库。一个例子是WeMo node .

WeMoNG.js

...
RED.httpAdmin.get('/wemoNG/devices', function(req, res) {
    res.json(wemo.devices);
});
...

WeMoNG.html

...
oneditprepare: function() {
    var devices;
    $.getJSON('wemoNG/devices', function(data) {
        devices = data;
        var devs = Object.keys(data);
        if (devs.length !== 0) {
            for (var d in devs) {
                if (devs.hasOwnProperty(d)) {
                    $('<option/>',{
                        'value': devs[d],
                        'text': data[devs[d]].name
                    }).appendTo('#node-config-input-device');
                }
            }
       }
    });
    $('#node-config-input-device').change(function() {
        var id = $( "#node-config-input-device option:selected" ).first().val();
        if (devices) {
            $('#node-config-input-type').val(devices[id].type);
            $('#node-config-input-name').val(devices[id].name);
        }
    });
}
...

关于javascript - 红色 Node 在管理 UI 中获取配置 Node 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265230/

相关文章:

javascript - Delete By Query API 以 curl 方式工作,但不在 Node-Red 中

javascript - 在 json 中使用变量

javascript - AWS Lambda postgres 连接超时,但仅在第一次尝试时

node-red - 节点红色 httpstatic 不工作

javascript - 我的应用程序中的未知提供商

node.js - 在 Express Nodejs 中记录用户事件

mysql - 如何使用node-red编写两个mysql数据库之间的同步函数

javascript - 从 Parse.Object.save() 返回完整的解析对象

javascript - Javascript 是否支持获取目录列表的功能?

javascript - return 语句在 setter 中做什么?