JsRenderチュートリアル - 存在しないプロパティを参照した時のエラーを回避する
JavaScript製でjQuery非依存なテンプレートエンジンであるJsRender/JsViewsを使ったチュートリアルを書いてみようと思います。
以前に書いたエントリJsRender入門 - Do You PHP はてなも参照してください。
今回やること
JsRenderやJsViewsで存在しないプロパティを参照した時のエラーを回避する
コード
<html> <body> <!-- レンダリング結果を表示するスペース --> <div id="result"></div> <script src="https://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript"></script> <script src="http://www.jsviews.com/download/jsviews.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { // データの配列(もしくはオブジェクト) var fruits = { code: "01", name: "りんご", color: { name: "赤" }, err: function() { return "エラーです"; } }; $.views.helpers({ onerror: function(message) { return message + "です"; } }); // テンプレートに名前をつけて登録する $.templates({ fruitsTemplate: "#template" }); // テンプレート"fruitsTemplate"に変数fruitsを渡し、 // レンダリング結果をid="result"に表示 $("#result").html($.render.fruitsTemplate(fruits)); }); </script> <script id="template" type="text/x-jsrender"> <div> <li>{{>color.name}}</li> {{!-- 存在するオブジェクトのundefinedなプロパティを参照しても エラーにならず、空文字が表示される --}} <li>{{>color.foo}}</li> {{!-- #data直下のundefinedなプロパティを参照してもエラーにならず、 空文字が表示される --}} <li>{{>foo}}</li> {{!-- undefinedのプロパティを参照すると {Error: TypeError: data.color.foo is undefined} というエラーになるが、onerrorを使うとエラー時に表示する メッセージを指定できる --}} <li>{{>color.foo.bar onerror="barがありません"}}</li> {{!-- リテラルだけではなくリンクした変数やヘルパーも使える --}} <li>{{>color.foo.bar onerror=color.name + "です"}}</li> <li>{{>color.foo.bar onerror=err()}}</li> <li>{{>color.foo.bar onerror=~onerror("ヘルパー")}}</li> </div> </script> </body> </html>
説明
JsRenderやJsViewsで存在しないプロパティを参照した場合、
{Error: TypeError: data.foo.bar is undefined}
のようなメッセージが表示されることがありますが、このデフォルトのメッセージではなく任意のメッセージを表示させることができます。
JsRenderでの書式は次のとおりで、変数や式に続けて"onerror="と表示するメッセージを記述します。
{{>[変数や式] onerror=[表示するメッセージ]}}
表示するメッセージには、文字列のほか、テンプレートに渡された変数の値やヘルパーも使用できます。
JsViewsの場合、データリンクしたタグ({^{...}})のほかにdata-link属性にも記述可能です。
<li data-link="color.foo.bar onerror='エラーです'"></li>