こんばんは。
フロントエンドエンジニアのtakakiです。
smartyベースでソシャゲなんかを作ってますと、smartyにアサインされた値をjsに渡したいことがありますよね。
<script> {literal} userId = {/literal}{$userId}{literal}; {/literal} </script>
こんな風にしてグローバルに置いて外部jsから触れる様にすると思います。
が、これやると、{$userId}がnullの時にバグるので要注意!
どういうことかというと、{$userId}がnullだと、jsは
userId =;
こうなるからです。
これを防ぐには<script>
タグより前に、
{if !$userId} {assign var="userId" value="null"} {/if}
と書いておけば解決します。
valueに文字列のnullをセットするのがミソです。
これを普通のnullにしちゃうと、
userId =;
これのまんまになりますからね。
あるいは、<div id=”main-container”>かなんかに、
<div id="main-container" data-user-id="{$userId}"> <!-- 略 --> </div>
こうやってセットしておけばjQueryで簡単に取得できますね。書きながらいま気づきましたけど。
外部jsなどからこのuserIdにアクセスするには、以下のように書いてください。
var userId = $("div#main-container").data("user-id");