SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

徹底解説JsRender/JsViews

JavaScriptテンプレートエンジンJsRenderの拡張機能

徹底解説JsRender/JsViews 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ヘルパー

 JsRenderの中からJavaScriptの関数や変数に直接アクセスすることはできません。タグの中から関数や変数にアクセスするには、それらをヘルパーとして登録します。

 ヘルパーを使用するには、renderメソッドを呼び出す前に登録します。$.views.helpersメソッドを呼び出し、引数にヘルパーの名前と値を渡します。

 定義したヘルパーを使用するには、{{:~ヘルパー名()/}}、もしくは、{{:~ヘルパー名}}のようにヘルパー名の前にチルダを指定します。

[リスト14]ヘルパー(JsRender4_sample9.html)
<!-- テンプレートの定義 -->
<script id="itemTemplate" type="text/x-jsrender">
  最終更新日:{{>~ConvertToDateString(lastModified)}}
</script>
[リスト15]ヘルパーの定義(JsRender4_sample9.html)
$.views.helpers("ConvertToDateString", function(dateTime){ return dateTime.toLocaleDateString(); });
図6:ヘルパー
図6:ヘルパー

 ヘルパー関数ConvertToDateStringを定義し、テンプレートから呼び出しました。ヘルパー関数を呼び出すには、{{>~ConvertToDateString(lastModified)}}のように、ヘルパー関数の前にチルダを指定し、通常のJavaScriptの関数呼び出しと同様に丸カッコを付けて引数を指定します。

 ヘルパー関数とコンバーターは似ていますが、コンバーターと異なり引数をとらないヘルパー関数を定義したり、ifやforタグの引数にヘルパーを使用したりすることができます。

 次の例では、ヘルパー関数をforタグの引数に使用しています。

[リスト16]forタグの引数にヘルパー関数を使用するテンプレート(JsRender4_sample10.html)
<!-- テンプレートの定義 -->
<script id="itemTemplate" type="text/x-jsrender">
  {{>name}}:<br/>
  {{for ~reverse(prefectures) }}
    {{>name}}の面積は{{>area}}km<sup>2</sup>です。<br/>
  {{/for}}
</script>
[リスト17]データモデルとヘルパー関数の定義(JsRender4_sample10.html)
// データモデルの定義
var item = {
    name: "関東地方の面積",
    prefectures: [
        { name: "茨城県", area: 6095.69 },
        { name: "栃木県", area: 6408.28 },
        { name: "群馬県", area: 6363.16 },
        { name: "埼玉県", area: 6363.16 },
        { name: "千葉県", area: 6095.69 },
        { name: "東京都", area: 2187.42 },
        { name: "神奈川県", area: 2415.84 },
    ]
};

// ヘルパーの定義
$.views.helpers("reverse", function(array) { return array.slice().reverse(); });
図7:ヘルパー関数の活用
図7:ヘルパー関数の活用

 配列の要素を反転させるヘルパー関数reverseを定義し、{{for}}の引数として使用しました。これにより、データモデル内の配列要素を逆順に表示しています。

 ヘルパー関数を使うと、ソートやフィルターのような機能も簡単に実装できます。

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
徹底解説JsRender/JsViews連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト やましぎ (ヤマシギ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7531 2013/12/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング