[mayaa-dev:118] Re: forEach の挙動について

Jun Futagawa [E-MAIL ADDRESS DELETED]
2009年 11月 5日 (木) 00:27:04 JST


ふたがわ (jfut) です。

# コミッタではないですが。

On 2009/11/04 11:19, duran wrote:

> すいません、forEachの挙動で確認したいことがあります。
> 
> 下記のように書いた場合に、
> getMemberListが呼ばれると思うのですが、
> getMemberListが二回呼ばれています。
> これは仕様でしょうか?
> 
> <m:forEach items=${memberList} var="member">

手元のMayaa 1.1.27では同様のケースで2回呼ばれることはないようです。
m:extends や m:insert を含む別のところで、

<m:write m:id="memberList.size" value="${ memberList.size() }" />

などのように、呼び出している箇所があるのではないかと思います。
問題となっている m:forEach をコメントアウトして、2回呼び出されていた
getMemberList が1回も呼ばれなくなるような状況でしたら、何か他に
問題があるのかもしれません。

以下、余計な内容ですが、意図しない呼び出しを予防するために、
勝手ルールでは必要となるパラメータをすべて m:beforeRender で
定義するようにしています。

<m:beforeRender><![CDATA[
	//
	// [require]
	// - action.getMemberList()
	// [optional]
	// - action.getHogeViewDto()
	//
	var memberList= action.getMemberList();
	var hogeViewDto = action.getHogeViewDto();
]]></m:beforeRender>

上記は2つ呼んでいますが、本当は .mayaa 内で action の関数を
直接呼び出して良いのは常に action.HogeViewDto 1つというルールです。
この勝手ルールは、action で定義されている関数を呼べるのが強力すぎて、
何でもかんでもテンプレート内から呼んで値を取得していたら、リファクタする
タイミングでどれがどこで使われているのかが判らなくなり、苦労した経験から
出来たルールです。

以上、ご参考までに。

-- 
Jun Futagawa


mayaa-dev メーリングリストの案内