[mayaa-user:597] Re: テーブルの1行おきに背景色を変える

suga [E-MAIL ADDRESS DELETED]
2007年 12月 1日 (土) 15:47:55 JST


suga です。

On 11/30/07, 田村 中 <[E-MAIL ADDRESS DELETED]> wrote:
> DBからとってきたListをループして表示する際に、
> <tr>タグに1行置きにいろを付けたいんですが
> いろいろ試してもどうしてもうまくいきません。
> list.mayaaソース(抜粋)
> <!-- 行の背景色指定 -->
> <m:if m:id="tableRow" test="${ i % 2 != 0}">
>  <m:echo m:id="tableRow">
>   <m:attribute name="bgcolor" value="#F1F1F1"/>
>  </m:echo>
>  <m:doBody/>
> </m:if>
> <m:if m:id="tableRow" test="${ i % 2 == 0}">
>  <m:echo m:id="tableRow">
>   <m:attribute name="bgcolor" value="#F1F1F1"/>
>  </m:echo>
>  <m:doBody/>
> </m:if>

ここを下記のようにすれば OK です。

    <m:echo m:id="tableRow">
        <m:if test="${ i % 2 != 0}">
            <m:attribute name="bgcolor" value="#F1F1F1"/>
        </m:if>
        <m:if test="${ i % 2 == 0}">
            <m:attribute name="bgcolor" value="#FFFFFF"/>
        </m:if>
        <m:doBody/>
    </m:echo>

HTML 側の id に対応する m:id は、必ずひとつです。
複数あっても使われません。(し、ログに警告が出ます)

まず tableRow に対応する tr タグは必ず出力する、かつその属性を書き換えるので
m:echo を割り当てます。その中で、m:if を使って m:attribute を使い分ける形に
なります。


下記のようにするともっとシンプルになります。
JavaScript の3項演算子を使っています。

    <m:echo m:id="tableRow">
        <m:attribute name="bgcolor"
            value="${ (i % 2 != 0) ? '#F1F1F1' : '#FFFFFF' }"/>
        <m:doBody/>
    </m:echo>


もう少し発展させると、こんな感じです。
tr タグに直接 m:forEach を当てて、その中で m:echo を使っています。
こうすると tr を div で囲まなくて良くなります。
Mayaa 側がやや複雑になってしまうのが難点ですけど。

HTML

    <tr m:id="tableRow">
        <td>(省略)</td>
    </tr>

Mayaa

    <m:forEach m:id="tableRow"
            m:items="${ adminList }" m:var="admin" m:index="i">
        <m:echo>
            <m:attribute name="bgcolor"
                value="${ (i % 2 != 0) ? '#F1F1F1' : '#FFFFFF' }"/>
            <m:doBody/>
        </m:echo>
    </m:forEach>

-- 
suga ( [E-MAIL ADDRESS DELETED] )


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