[mayaa-user:423] echo と insert の相性
yamada
yamada @ vest.co.jp
2007年 1月 20日 (土) 14:40:07 JST
はじめまして、山田と申します。
現在、mayaa のコンポーネント化機能(insert)を再帰的に用いることでツリーを構築しようと考えています。
treeNode.html 概略
<body>
<div id="treeNode">
-<span id="nodeLabel">ラベル</span>
<div id="childLoop">
<div id="childNode">子ノード</div>
</div>
</div
</body>
treeNode.mayaa 概略
<m:write id="nodeLabel" value="${binding.node.label}"
replace="false" />
<m:forEach id="childLoop" var="${child}"
items="${binding.node.children}" replace="false" />
<m:insert id="childNode" path="treeNode.html" node="${child}" />
このような形で、ツリーを構築することには成功しました。
ところでこのままですと、id="treeNode" という要素が大量に出力されてしまい、DHTML などでこれらを識別したいとき(たとえばD&Dで動かしたいときなど)に旨くありません。
そこで id="treeNode" → id="treeNode_Xxx" という形式に置換してやることで、一意な id を付与してやろうと考え、以下の記述を treeNode.mayaa に追記しました。
<m:echo id="treeNode">
<m:attribute name="id" value="treeNode_${binding.node.id}" />
</m:echo>
結果は失敗で、ツリー構造が崩れてしまいました。
-Root
-Node1
-Leaf1-1
-Leaf1-2
-Node2
-Leaf2-1
となるべきところ
-Leaf1-1
-Leaf1-2
-Leaf2-1
となりました。
つまり、末端の Leaf 以外出力されませんでした。
echo した要素の中で insert が使用された場合、insert 以外の出力がすべて無視されてしまうようです。
mayaa のプロセッサを用いて動的に書き換えたラベルだけでなく、静的に記述した - も出力されません。
Root、Node は子がいるので insert が行われ、ラベル等が消えてしまうようです。
Leaf には子がいないので insert が行われず、ラベルが出力できているようです。
echo の中で id を書き換えたのがまずいのかと思いましたが、id の変更がある無しにかかわらず再現しました。
echo のある無しが重要なようです。
この insert が再帰的な呼び出しだからまずいのか、そうでなくても起こるのかはいまだ確認できていません。
mayaa のバージョンは 1.1.5 です。
なにぶんまだ使い始めたばかりで、視野が狭いのかもしれません。
この現象が mayaa の不具合によるものなのかもさておき、ほかにうまい解決方法がありましたらご教示ください。
各ノードが一意の id を持ったツリー構造を構築することができれば十分なので、このやり方(echo+再帰insert)にはこだわりません。
mayaa-user メーリングリストの案内