1

Dojo を使用して構成ダイアログを作成していますが、後でユーザー入力を問い合わせる必要があります。ダイアログには複数の行があり、それぞれが同じ形式とタグを持っています。これは、各行を作成するために使用する html です。

html = '<div class="cfgtxtrow"> <label>Label:</label>
<input id="mac" type="hidden" name="mac" value="'+mac+'"/>
<input id="label" type="text" maxlength="6" name="label" value="'+labl+'"/>
</div>';

その部分はすべて機能し、返されたときに Firebug でデータを確認できます。

値を解析して、最終的に xhr を使用してサーバーに送信する必要があります。そこで、dojo クエリを使用してノードリストを取得し、各ノードをたどって入力値を取得し、それらの連想配列を作成して送信できると考えました。これは、プログラムで値を検証するのとよく似ていると考えました。

各ノードで innerhtml を確認できます (dojo.query(".cfgtxtrow").forEach( function(node)) を使用) が、プログラムで (dojo を使用して) 各ノードの値を取得する方法がわかりません。ノードリストでdojo.byIdまたはクエリを使用して内部要素にアクセスできますが、エラーが返されます。

これは簡単だと思っていたので、私の概念はすべて間違っているのではないかと疑い始めています。

これが私が最終的に得たものです..

dojo.query(".cfgtxtrow input").forEach( function(node)
{
    id = dojo.attr(node, "id" );
    console.debug( node );

    if( id == "mac" ) mac = dojo.attr( node, "value" ); // since mac comes first this is safe..
    if( id == "label" )
    {
        labl = dojo.attr( node, "value" );
        console.debug( mac );
        console.debug( labl );
        macLabels[mac] = labl;
    }
});
console.debug(macLabels[mac]);
// send the data via the xhrPut call..

私はそれが単純であるべきだと思っていました.dojo.attr呼び出しは仕事をしているようです..

同じことを行うより良い方法はありますか?

4

1 に答える 1

0

まず、id属性を使用して複数の行を識別しないでください。htmlドキュメントには特定のIDを持つdomノードが1つだけ存在できます。多分それはあなたの問題の始まりですか?

したがって、次のようにhtmlを変更した場合:

<div class="cfgtxtrow"> <label>Label:</label>
<input class="mac" type="hidden" name="mac" value="macValue"/>
<input class="label" type="text" maxlength="6" name="label" value="labelValue"/>
</div>​

この(クイック&ダーティ)コードを実行する

​require(['dojo/query'],function(query) {
    var macLabels = {};
    query('.cfgtxtrow').forEach(function(row) {
        var mac = query('.mac', row)[0].value;
        var label = query('.label', row)[0].value;
        macLabels[mac] = label;
    });
    console.log(macLabels);
});​​​​​​​​​

このオブジェクトをコンソールログに出力します:{macValue: "labelValue"}

于 2012-11-05T01:38:58.480 に答える