[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 メーリングリストの案内