Home > しらべる > MayaaでXPathとListで擬似forループ

MayaaでXPathとListで擬似forループ

  • Posted by: memorycraft
  • 2008年12月23日 00:51
  • しらべる

mayaaを使ってみて実感した一番こまるのはm:idやm:xpathに変数が使えないこと。

たとえば、

<div id="pref">
	<table>
		<tr>
			<td><input type="checkbox" />
				北海道</td>
			<td><input type="checkbox" />
				青森県</td>
			<td><input type="checkbox" />
				秋田県</td>
			<td><input type="checkbox" />
				岩手県</td>
			<td><input type="checkbox" />
				山形県</td>
		</tr>
		<tr>
			<td><input type="checkbox" />
				宮城県</td>
			<td><input type="checkbox" />
				福島県</td>
//(以下略)

とあり、DB項目から抽出した都道府県情報

List<Map> prefectureList

があったとすると、

forでまわして、プロセッサ一発でセットしたいというのが人情というもの。
感覚的にはもう、こうしたくて仕方ない。むりだけど。

<!-- 当然エラー -->
<m:for init="${ var i = 0 }"
       test="${ i &lt; prefectureList.size() }"
       after="${ i++ }" >

	<m:echo m:id="${cb + i}">
		<m:attribute name="name" value="prefId" />
		<m:attribute name="value" value="${prefecture.get('prefId')}" />
	</m:echo>

</m:for>


テンプレートにはできるだけ手を入れたくないのだけど、しかたなく、inputタグにid(cb0,cb1,cb2,,,)を付けて、m:echoでidを参照しようかと思って以下にしても

<m:with m:xpath="//div[@id='pref']/table/tr/td/input[@type='checkbox']">
	<m:forEach items="${prefectureList}" var="prefecture" index="i">
		<m:echo>
			<m:if test="${id == 'cb' + i}">
				<m:attribute name="name" value="prefId" />
				<m:attribute name="value" value="${prefecture.get('prefId')}" />
			</m:if>
		</m:echo>
	</m:forEach>
</m:with>

idを参照できるためにはecho内部にifを書く必要があるけど、
echoを先に書いたら、マッチしないのに出力されてしまう。。。
もどかしすぎる!!!


そんなとき、ふとひらめいた。
xpathで指定したので、同時に一括処理されるのかと思ったのだけど、中で変数をカウントアップしたら
ちゃんと対象タグの数だけ処理が走っていました。

つまり、、

<m:beforeRender><![CDATA[
	var cbcount = 0;
]]></m:beforeRender>

<m:with m:xpath="//div[@id='pref']/table/tr/td/input[@type='checkbox']">
	<m:echo>
		<m:attribute name="name" value="prefId" />
		<m:attribute name="value" value="${prefectureList.get(cbcount).get('prefId')}" />
	</m:echo>
	<m:exec script="${cbcount++}" />
</m:with>

タグカウント用の変数でList出力するようにしたらうまく行きました。ただし、タグの順番とListの順番が同じになってる必要がありますけど。テンプレートにもノータッチ。おっしゃ!

Trackbacks:0

TrackBack URL for this entry
http://www.memorycraft.jp/mt-tb.cgi/95
Listed below are links to weblogs that reference
MayaaでXPathとListで擬似forループ from メモリークラフト

Comments:0

Comment Form

Home > しらべる > MayaaでXPathとListで擬似forループ

ページの先頭へ戻る