smarty + javascript

こんばんは。
フロントエンドエンジニアの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");
カテゴリー: front-end, JavaScript, jQuery パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*