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