ホームページ > 記事 > ウェブフロントエンド > jQuery .tmpl() の使用例 Introduction_jquery
ページを更新するためのデータの動的リクエストは、ブログコメントのページング動的読み込み、Weibo のローリング読み込みおよびスケジュールされたリクエスト読み込みなど、現在では非常に一般的な方法です。
これらの場合、動的リクエストによって返されるデータは通常、組み立てられた HTML、JSON、または XML のいずれかです。つまり、データはブラウザー側ではなく、サーバー側で組み立てられます。ただし、HTML を返すのは送信量の点でコスト効率が悪く、Web 送信では XML よりも JSON が使用されるようになりました。
ブラウザ側でJSONに基づいてHTMLを生成する際に非常に面倒な点は、構造が複雑でないときは大丈夫ですが、一度構造が複雑になってしまうと非常に注意してJavaScriptを書く必要があることです。保守するのがほぼ不可能なコード。
PHP でデータのスペルの問題を解決するために Smarty テンプレートが使用されるのと同じように、JavaScript もテンプレートを使用してこれらの問題を解決できます。たとえば、jQuery に基づく jquery.tmpl は現在、公式のテンプレート プラグインとして受け入れられています。詳細な API は jQuery のテンプレートにあり、組み込みのデモでもさまざまな使用法が示されています。
私自身のいくつかの使用では、JavaScript の代わりに、より直感的な HTML 記述方法を使用して、JSON 変数を使用してデータを入力することで、コードの見栄えが大幅に向上しました。
Tmpl にはいくつかのタグがあります:
${}: {{=}} と同等で、出力変数であり、HTML エンコーディングが渡されています。
{{html}}: 出力変数 html ですが、HTML エンコードなしで、HTML コードの出力に適しています。
{{if }} {{else}}: 分岐ロジックを提供します。
{{each}}: ループ ロジック、$value アクセス反復変数を提供します。
jquery tmpl の使用方法:
テンプレート定義:
方法 1:
<script id="movieTemplate" type="text/x-jquery-tmpl"> <li> <b>${Name}</b> (${ReleaseYear}) </li> </script>
方法 2:
function makeTemplate(){ var markup='<li><b>${Name}</b> (${ReleaseYear})</li>‘; $.template(“movieTemplate”, markup); }
データ:
var movies = [ { Name: "The Red Violin", ReleaseYear: "1998" }, { Name: "Eyes Wide Shut", ReleaseYear: "1999" }, { Name: "The Inheritance", ReleaseYear: "1976" } ];
スクリプト:
$( "#movieTemplate" ).tmpl( movies ) .appendTo( "#movieList" );
例 1:
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script> </head> <body> <ul class="param-list"></ul> <script type="text/x-jquery-tmpl" id="new-param-tmpl"> <li rel="${num}"> <input type="text" name="key[${num}]" value="${key}" placeholder="key" /> = <input type="text" name="value[${num}]" value="${value}" placeholder="value" /> <button type="button" class="button small remove-param"><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/69.png" height="12" alt=""/></button> <button type="button" class="button small add-param"><span><img src="http://mediacdn.disqus.com/1338845651/images/v3/icon/16/13.png" height="12" alt=""/></button> </li> </script> <script> $(function(){ function addParam(key, value) { var param_list = $('.param-list'); var num = param_list.find('li').length; // build a template to clone the current row var built = $('#new-param-tmpl').tmpl({ num: num, key: key || '', value: value || '', }); if (key) param_list.prepend(built); else param_list.append(built); param_list.find('li:not(:last) .add-param').hide(); param_list.find('li:last .add-param').show(); param_list.find('li:not(:last) .remove-param').show(); param_list.find('li:last .remove-param').hide(); } // bind events $('.param-list .remove-param').live('click', function(){ $(this).parent().remove(); return false; }); $('.param-list .add-param').live('click', function(){ addParam(); return false; }); addParam(); }) </script> </body> </html>
例 2