0

次の関数では、意図したとおり、親オブジェクトのみを取得し、その子 (または孫) は取得しません。

function nest(n)
{
    for(var i=0;i<n.attributes.length;i++){
        var item = n.attributes[i];
        root.appendChild(item.data);
    }
}

nest(me);

子供と孫を取得するように再帰を使用するroot.appendChild(nest(item.data));と、親は取得できません。

親と子の両方を取得するにはどうすればよいですか?

4

1 に答える 1

1

あなたが現在持っているものとあなたが本当に欲しいものについてのあなたの質問に明確な説明がなければ、私は撃ちます.

いくつかのツリー構造を設定したいようですが、トップレベルのノードしか取得していないようです。常に を呼び出しているため、これは理にかなっています。root.appendChildそのため、常にルート ノードに追加されます。

あなたの例 recursive call に混乱していますroot.appendChild(nest(item.data))。あなたのnest関数は何も返さないので、引数として渡しappendChildても何も役に立ちません。

おそらく、現在のベース ノード (次のレベルの子ノードを追加するノード) と、それらのノードによって表されるもののコレクションの両方を引数として受け入れるように関数を設計する必要があります。データ構造に応じて、これは次のようになります。

function nest(base, items) {
    for (var i=0; i<items.length; i++) {
        var item = items[i];
        var new_child = base.appendChild(item.data);
        nest(new_child, item.children);
    }
}

ただし、Ext ツリーにロードしたい整形式のデータ構造がある場合は、ツリー構造を適切に構成されたストアにロードするだけで、ツリーが魔法のように機能するはずです。データ構造を見せていただければ、助けになるかもしれません。

于 2013-07-24T16:39:33.833 に答える