我已經問過關於如何避免在js中編寫html的問題,然後有人告訴我使用javascript模板,例如,jquery/template pugin和ect。javascript模板和事件處理
這是當生成靜態html,例如一個好主意:
<ul id="productList"></ul>
<script id="productTemplate" type="text/x-jquery-tmpl">
<li><a>${Name}</a> (${Price})</li>
</script>
<script type="text/javascript">
var products = [
{ Name: "xxx", Price: "xxx" },
{ Name: "yyy", Price: "xxx" },
{ Name: "zzz", Price: "xxx" }
];
// Render the template with the products data and insert
// the rendered HTML under the "productList" element
$("#productTemplate").tmpl(products)
.appendTo("#productList");
</script>
然而,當我嘗試一些事件綁定生成的HTML,我遇到了一些問題。
例如,我有一個頁面,用戶可以通過價格/名稱/位置搜索某些產品。
所以,我有三個功能:
searchByPrice(lowPrice,highPrice,productType,currentPage)
searchByName(name,productType,currentPage);
searchByLocation(location,currentpage);
上述所有功能都在服務器端的realated方法,他們將retrun產品USINT的XML格式。因爲它們會重新運行這麼多項目,所以我必須分頁,「currengPage」用於告訴服務器端應該返回哪部分結果。
當客戶端從服務器端獲得結果時,現在它是js將它們顯示在div中,並且如果可能的話創建一個頁面欄。
之前,我已經知道了模板,我用這種方式(這是我最討厭的,盡我所能來避免):
function searchByPrice(lowPrice,highPrice,productType,currentPage){
var url="WebService.asmx/searchByPrice?low="+lowPrice="&high="+highPrice+"&curPage="+currentPage;
//code to create the xmlHttp object
xmlhttp.open("GET",url,true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
var i=0;
var Prohtml="";
var proList=parseProductList(xmlhttp.responseText);
for(i=0;i<prolist.length;i++){
Prohtml+="<li><a href='#'>"+prolist[i].name+"</a> ("+prolist[i].price"+)</li>";
}
//generate the paging bar:
var totleResult=getTotleResultNumber(xmlhttp.responseText);
if(totleResult>10){
var paghtml="<span>";
//need the paging
var pagNum=totleResult/10+1;
for(i=1;i<=pagenum;i++){
paghtml+="<a onclick='searchByPrice(lowPrice,highPrice,productType,currentPage+1)'>i</a>";
//here the synax is not right,since I am really not good at handle the single or doule '"' in this manner.
//also if in the searchByName function,the click function here should be replaced using the searchByName(...)
}
}
}
}
}
在這個例子中,很容易使用模板來生成「Prohtml 「由於沒有事件處理,但」paghtml「如何,點擊功能在不同的搜索類型中是不同的。
那麼,有什麼好主意來解決這個問題?