2016-05-17 4 views
0

これは間違ったアプローチですが、基本的には、ドロップダウンの1つが設定ノードの値に依存するノードを作成したいと考えています。それでは新しいノードで、私はこれをやりたいノードRedは、管理UIで設定ノードの値を取得します

設定-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> 

設定-test.js

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

test-node.html

APIがトークンとWeb要求を使用して、それぞれのトークンを持つノードのリストに対して、APIがその特定のノードに対する要求に必要な場合があるというケースがあります。また、各ノードにいくつかのサブ項目が追加されています。これらの項目は、ユーザーが指定したテストノードのリストを表示して選択できるようにします。各ノードの設定は、これらの追加オプションで設定ノードを作成することは意味をなさないと思われます。

明らかに、トークンはテストノード上のテキストフィールドとして提供することができますが、その目的は複製の量を制限し、ターゲットユーザーに対して構成をより合理化することです。

console.log(this)を使用しています。 oneditprepare()関数の中にはtokenプロパティの値がありますが、それはconfigノードを指すように見えるIDです。しかし、私はこのノードの価値を得るためにこれを使う方法を見つけることができません。

トークン: "5a1ab56c.5e478c"

私はRED.nodes.getNodeを試してみました()が、この方法は、ランタイムAPIでのみ使用可能です:http://nodered.org/docs/api/runtime/api#getNode

ありがとう!

答えて

1

これを行うには、設定ダイアログHTMLとランタイム側のnodejsコード間で独自の通信を実装する必要があります。これを行う通常の方法は、nodejsコードにHTTPエンドポイントを追加し、このエンドポイントにAJAXスタイルの呼び出しを行ってドロップダウンを設定することです。

node-red-nodes gitリポジトリにも同様の例があります。 1つの例は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); 
     } 
    }); 
} 
... 
関連する問題