背景:
昨天幫朋友做一個easyui datagrid的小實例時,才發現easyui datagrid的checkbox列,沒有根據值為true或false來選中checkbox,當時感覺太讓人失望了,這樣的問題就沒有解決,太不人性化了。因為從去年到今年一直用的是miniui,所以用起來就會有對比了,easyui和miniui各個方便相比差的太遠了,也有可能是miniui是商業的吧!
記錄下來解決方法,以便日后用的時候方便查找,如果有更好方法請留言,互相學習學習!
問題:
先上個幾個圖片讓大家有一個直觀的印象

easyui datagrid表格的列配置內容

json數據

datagrid顯示的效果
就是一個簡單的datagrid,有一個checkbox列,問題就出在checkbox列,當加載數據時checkbox列的值有的給的是true,但是給true的checkbox卻沒有被選中,這就是問題的所在,相信大家從圖片中也能看出,現在前端UI很多,但大多數的datagrid應該實現了這個功能。
解決方法:
方法一:在onLoadSuccess事件中處理
代碼如下:
function onLoadSuccess(data) {
var rowData = data.rows;
$.each(rowData, function (idx, val) {
if (val.ck) {
$("#dg").datagrid("selectRow", idx);
}
});
}
此方法是從網上找的,但是感覺不是很好,而且數據多了,效率肯定不行了,所以就有了方法二。
方法二:修改easyui源代碼
跟蹤源代碼最后找到了要修改的地方,主要修改renderRow方法中的checkbox分支
源代碼如下:
if (col.checkbox) {
cc.push("<input type=\"checkbox\" name=\"" + _69e + "\" value=\"" + (_69f != undefined ? _69f : "") + "\">");
}
仔細一看發現的的確確,沒有實現此功能,其實很簡單,改一下當_69f為true的時候加上checked="checked"的屬性即可(注意:我改的是1.3.5的源代碼)。
改后的代碼如下:
if (col.checkbox) {
//<input type="checkbox" value="true" checked="checked"/>
cc.push("<input type=\"checkbox\" name=\"" + _69e + "\" value=\"" + (_69f != undefined ? _69f : "") + "\"" + (_69f ? "checked=\"checked\"" : "") + "\"/>");
}
成果:
上一個簡單的圖片來看一下

