这是基于EasyUI 1.2.6的tree新增的loadFilter功能的一个扩展。大家都喜欢ztree的简单数据结构(扁平pid结构数据集,也就是id,pid形式),于是1.2.6有了loadFilter之后,我们可以很简单的就实现了。(这里要赞一下EasyUI的作者,对于架构的开闭原则做的很到位。)
tree-loadFilter.js:
$.fn.tree.defaults.loadFilter = function (data, parent) {
var opt = $(this).data().tree.options;
var idFiled, textFiled, stateFiled, parentFiled;
if (opt.parentFiled) {
idFiled = opt.idFiled || 'id';
textFiled = opt.textFiled || 'text';
stateFiled = opt.stateFiled || 'state';
parentFiled = opt.parentFiled;
var i, l, treeData = [], tmpMap = [];
for (i = 0, l = data.length; i < l; i++) {
tmpMap[data[i][idFiled]] = data[i];
}
for (i = 0, l = data.length; i < l; i++) {
if (tmpMap[data[i][parentFiled]] && data[i][idFiled] != data[i][parentFiled]) {
if (!tmpMap[data[i][parentFiled]]['children'])
tmpMap[data[i][parentFiled]]['children'] = [];
data[i]['text'] = data[i][textFiled];
data[i]['state'] = data[i][stateFiled];
tmpMap[data[i][parentFiled]]['children'].push(data[i]);
} else {
data[i]['text'] = data[i][textFiled];
data[i]['state'] = data[i][stateFiled];
treeData.push(data[i]);
}
}
return treeData;
}
return data;
};
前台调用:
$('#tree').tree({
animate: true,
dnd: true,
url: '../Home/GetTreeViewSimpleData',
idFiled: "ID",
textFiled:"Text",
parentFiled:"ParentID",
stateFiled:"State",
line:true
});
后台数据:
public JsonResult GetTreeViewSimpleData()
{
return Json(db.TreeView);
}