2012-01-08 6 views
5

私の経験では、サーバー側とクライアント側のテンプレートには多くのhtmlが重複しているようです。クライアント側では、Jqueryテンプレートのようなものを意味し、サーバー側ではhtmlでサーバー側変数を使用することを意味します。どのようにクライアントとサーバー側tempatesのhtmlの重複を避けるために?

以下のコードでは、foreachループはすべてのページの読み込み時に実行され、項目のリストを作成するために使用されます。動的値に使用される可変プレースホルダを使用して、HTMLのブロックを囲むことに注意してください。

foreachループの下には、正確に同じhtml構造のJqueryテンプレートがありますが、違いは変数構文だけです。

「マージ」する方法はありますか?どちらの場合でも同じHTMLマークアップ構造を繰り返す必要はありませんか?どちらの場合でも正確に同じhtmlブロックを使用しなければならないのは間違っているようです。

<h1>Portfolio's</h1> 
      <ul id="portfolioList" class="portfolio"> 
       <% foreach (Portfolio p in Portfolios) 
        { %>   
         <li> 
          <span class="delete">[X] </span> 
          <a href="/portfolioDetails.aspx?p=<%=p.PortfolioId %>"><%=p.Name %></a> 
         </li> 
       <% } %> 
      </ul> 

      <!-- portfolio template --> 
      <script id="portfolioTemplate" type="text/x-jquery-tmpl"> 
       <li> 
        <span class="delete">[X] </span> 
        <a href="/portfolioDetails.aspx?p=${PortfolioId}">${Name}</a> 
       </li> 
      </script> 

答えて

2

私は理解しているように、あなたのJS-テンプレートは、AJAXでrecived追加ポートフォリオを、レンダリングするために、後で使用されていますか?

もしそうなら、あなたはどちらかのことができます - サーバーサイドでの事前レンダリングを取り除くと、このためだけのJSを使用して取得JS-TMPLを取り除くとAjaxレンダリング済みのHTML

-OR-

で返します。 2番目はたぶん「クリーナー」です。最初にもう1つのajaxリクエストを作成したくない場合は、初期データをjson(テンプレートと同じように)にレンダリングし、jsレンダリングfuncだけを実行することができます。

<h1>Portfolio's</h1> 
<ul id="portfolioList" class="portfolio"> 
</ul> 

<!-- portfolio template --> 
<script id="portfolioTemplate" type="text/x-jquery-tmpl"> 
    <li> 
     <span class="delete">[X] </span> 
     <a href="/portfolioDetails.aspx?p=${PortfolioId}">${Name}</a> 
    </li> 
</script> 

<!-- initial rendering -->  
<script> 
    (function(){ 
     var initData = [ 
      <% foreach (Portfolio p in Portfolios) { %> 
      { PorfolioId : <%=p.PortfolioId%>, Name : "<%=p.Name%>" }, 
      <% } %> 
     ]; 
     $("#portfolioTemplate").tmpl(initData).appendTo("#portfolioList"); 
    }()); 
</script> 

おそらくあなたは、いくつかのadjusmentsを作る必要がありますが、問題なく動作するはずです。

+0

2番目のオプションに対する追加のajaxリクエストを回避するためのテクニックの例を挙げてください。 – chobo

+0

例を追加しました。 –

+0

これは実際にはかなりうまく動作します、ありがとう! – chobo

0

ネストされたテンプレートまたはスニペットを使用する。

+0

詳細を教えてください。私はあなたが何を意味するか分からない – chobo

0

hamlcを使用できます。それは両側のサポートを持っています...

スリムも良いです。クライアント側のスリムはスキムと呼ばれます。

関連する問題