在表現層使用FreeMarker模板引擎來渲染頁面,使用了<#list>標籤做循環輸出。在頁面如何使用js代碼選擇其中的某一行元素呢?
SpringMVC中,處理器controller執行完成後降模型和視圖返回給前端控制器,然後前端控制器會請求視圖解析器解析視圖。當前端控制器拿到解析完成的視圖後,纔將視圖返回給瀏覽器。freemarker填充數據渲染視圖是在視圖解析器這裏完成的。js代碼實在瀏覽器加載運行的。在js代碼中:pageResult.list[index]這樣的寫法是不合法的,因爲index是js代碼中定義的變量,而後臺在渲染視圖時並沒有加載js代碼。js代碼是在瀏覽器端加載的。pageResult.list[0]這樣的寫法是合法的。
比如在頁面是這樣的:
<#list pageResult.list as item>
<td>${item.companyid!}</td>
<td>${item.dep!}</td>
<a href="javascript:void(-1);" class="edit_Btn">
編輯
</a>
</#list>
現在想使用js選擇某一行元素,進行相關操作。有2種方法。
方法一:
自定義一個數據變量data-json,將那一行的數據轉換成json字符串${item.jsonString}然後賦值給data-json,js就可以取出了用如下方式取出數據,Var data = $(this).data(“json”);
<a href="javascript:void(-1);" class="edit_Btn" data-json="${item.jsonString}">編輯</a>
js:
var data = $(this).data("json");
這種方法需要在實體類中添加getsonString()方法。
/**
* 定義getJsonString()函數,供前端data-json='${item.jsonString}'使用
* @return
*/
public String getJsonString()
{
Map<String, Object> map = new HashMap<String, Object>();
map.put("companyid", companyid);
map.put("dep", dep);
return JSON.toJSONString(map);
}
方法二:
自定義一個數據變量data-value,將那一行的數據的數組下標${item_index}然後賦值給data-value.
<a href="javascript:void(-1);" class="edit_Btn" data-value="${item_index}">編輯</a>
js就可以取出了用如下方式取出數據,var index = $(this).data(“value”);
var index = $(this).data("value");
var data = dataArray[index];
在js代碼加載的時候必須定義dataArray數組並賦值
<script type="text/javascript">
$(function() {
/*數據初始化*/
var dataArray = new Array();
<#list pageResult.list as item>
var obj = new Object();
obj.companyid = '${item.companyid!}';
obj.dep = '${item.dep!}';
dataArray.push(obj);
</#list>
}
</script>