pig's diary

何でも忘れるので万年初心者ね

Soy の boolean 評価はどうなってる?

基本的には JavaScript の boolean 評価にならっているようです。

/**
 * ここからレンダリングをスタート。
 */
{template .soyweb}
  {call .myTemplate}
    {param myString: '' /}
    {param myBoolean: false /}
    {param myNumber: 0 /}
    {param myNullable: null /}
    // $myUndefined を引数なし(undefined)で呼んでみる
  {/call}
{/template}

/**
 * @param myString
 * @param myBoolean
 * @param myNumber
 * @param myNullable
 * @param? myUndefined
 */
{template .myTemplate}
  下のどれも出力されません。
  {if $myString} 出ません {/if}
  {if $myBoolean} 出ません {/if}
  {if $myNumber} 出ません {/if}
  {if $myNullable} 出ません {/if}
  {if $myUndefined} 出ません {/if}
{/template}

JavaScript書きにはとても使いやすい形ですが、空文字列や数字0には注意が必要。

しかし、?: 演算子の真偽評価は if とは違います。?: は isNonnull() を使う動きをします。上と同じ .soyweb から呼んだとして、こうなります。

{template .myTemplate}
  {$myString?:'boom'} // 空文字を出力
  {$myBoolean?:'boom'} // "false" を出力
  {$myNumber?:'boom'} // 0 を出力
  {$myNullable?:'boom'} // "boom" を出力
  {$myUndefined?:'boom'} // "boom" を出力
{/template}

もしかすると注意を要したのは私だけかも知れませんがね。ガハッハッハッハ!