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}
もしかすると注意を要したのは私だけかも知れませんがね。ガハッハッハッハ!