kendoui treeview树形菜单含有checkbox的选择问题

$(document).ready(function(){
var basePath = $('#contextPath').val();
/**
* treeview相关的数据
*/
String.prototype.bool = function() { 
    return (/^true$/i).test(this); 
}; 
var commonTreeViews=$("div[xr-ui=XrTreeView]");
$.each(commonTreeViews,function(index,commonTreeView){
//判断如果已经加载过了不需重新加载     
if($(commonTreeView).data("kendoTreeView")){
return true;//进入下一个循环
}
var treeId = $(commonTreeView).attr("id");
var xr_tree_tables=$(commonTreeView).attr("xr-table");
if(!xr_tree_tables){//属性和内容都不能为空,xr_tree_tables的可能值false,null,undefined,""即空字符串,0,NaN等
toastr.warning("id为"+treeId+"的控件,自定义属性xr-table的内容必须存在");  
return false;//跳出整个循环
}
var xr_table_root=$(commonTreeView).attr("xr-table-root");
/**
* 此处用于判断是一张表还是两张表的情况
* 一张表:每次展开节点的时候查询的相同的表xr_tree_tables,相同的列xr_tree_columns
* 只是每次查询的条件会改变
* 两张表:第一次查询的根节点是一张表xr_table_root,查询的列为xr_column_root;
* 根节点的叶子节点的数据来自于不同的表xr_tree_tables,查询的列为xr_tree_columns,
* 查询的条件为xr_tree_conditions

*/
//xr_tree_expand=true表示自动展开所有节点,默认为false不自动展开节点
var xr_tree_expand=false;
if($(commonTreeView).attr("xr-expand")){
xr_tree_expand=$(commonTreeView).attr("xr-expand").bool();
}
if(!xr_table_root){//一张表
//xr_tree_checkbox=true;表示要加上复选框,默认为false,不加上复选框
var xr_tree_checkbox=false;
if($(commonTreeView).attr("xr-checkebox")){
xr_tree_checkbox=$(commonTreeView).attr("xr-checkebox").bool();
}
//要查询的列
var xr_tree_columns=$(commonTreeView).attr("xr-columns");
if(!xr_tree_columns){//属性和内容都不能为空
toastr.warning("id为"+treeId+"的控件,自定义属性xr-columns的内容必须存在等");  
return false;//跳出整个循环
}
//查询条件
var xr_tree_conditions=$(commonTreeView).attr("xr-conditions");
if(typeof(xr_tree_conditions) == "undefined"){//内容可也空,但是属性必须存在
toastr.warning("id为"+treeId+"的控件,自定义属性xr-conditions必须存在,内容可为空等");  
return false;//跳出整个循环
}
}else if(xr_table_root){//两张表
var xr_column_root=$(commonTreeView).attr("xr-columns-root");
if(!xr_column_root){//属性和内容都不能为空
toastr.warning("id为"+treeId+"的控件,自定义属性xr-columns-root的内容必须存在等");  
return false;//跳出整个循环
}
var xr_column=$(commonTreeView).attr("xr-columns");
if(!xr_column){//属性和内容都不能为空
toastr.warning("id为"+treeId+"的控件,自定义属性xr_column的内容必须存在");  
return false;//跳出整个循环
}
var xr_tree_conditions=$(commonTreeView).attr("xr-conditions");
if(typeof(xr_tree_conditions) == "undefined"){//内容可也空,但是属性必须存在
toastr.warning("id为"+treeId+"的控件,自定义属性xr-conditions必须存在,内容可为空等");  
return false;//跳出整个循环
}
}

var commonTreeViewDataSource = new kendo.data.HierarchicalDataSource({
transport : {
read : {
url : basePath + "/devVer/jsonListByQuery",
type:"POST",
dataType : "json",
data:{tables:xr_tree_tables,columns:xr_tree_columns,conditions:xr_tree_conditions,ID:0},
},
parameterMap : function(options, operation) {
if (operation == "read") {
if(!xr_table_root){//一张表
if(para_supId){
xr_tree_conditions="SUP_ID='"+para_supId+"'"+"AND ENABLED=1 ";
}else if(options.ID!=0){
xr_tree_conditions="SUP_ID='"+options.ID+"'"+"AND ENABLED=1 ";
}
var parameter = {
tables:xr_tree_tables,
columns:xr_tree_columns,
conditions:xr_tree_conditions,
};
return parameter;
}else if(xr_table_root){//两张表
if(options.ID==0){//第一次请求数据
var parameter = {
tables:xr_table_root,
columns:xr_column_root,
};
return parameter;
}else{//第二次请求数据
xr_tree_conditions=xr_tree_conditions+"'"+options.ID+"'"+"AND ENABLED=1 ";
var parameter = {
tables:xr_tree_tables,
columns:xr_column,
conditions:xr_tree_conditions,
};
return parameter;
}
}

}
},
},
schema : {
model : {
id:"ID",
hasChildren : "hasChild",//是否有子节点
expanded:xr_tree_expand//自动展开相应节点
},
}
});
var para_supId=null;//手动展开节点时获得展开的节点的ID
var treeView=null;
if(xr_tree_checkbox){//加上复选框
treeView=$(commonTreeView).kendoTreeView({
dataSource : commonTreeViewDataSource,
dataValueField : "ID",
dataTextField : "NAME",
select:onSelect,
expand: function(e) {
para_supId=treeView.dataItem(e.node).ID;
},
// 延迟加载,默认是true,这里设置false是因为在初始化闭合的时候,如果选中根元素,是不法获取子节点id的
loadOnDemand : true,
checkboxes: true,//复选框
checkboxes : {
            checkChildren : false//当属性的值为false时表示当选中父节点时子节点不会被选中
         }
}).data("kendoTreeView");
}else{//没有复选框
treeView=$(commonTreeView).kendoTreeView({
dataSource : commonTreeViewDataSource,
dataValueField : "ID",
dataTextField : "NAME",
select:onSelect,
expand: function(e) {
para_supId=treeView.dataItem(e.node).ID;
},
// 延迟加载,默认是true,这里设置false是因为在初始化闭合的时候,如果选中根元素,是不法获取子节点id的
loadOnDemand : true,
}).data("kendoTreeView");
}
//选择某个菜单的方法
function onSelect(e){
var xr_selected=$(commonTreeView).attr("xr-selected");
if(xr_selected){
var selectJson = JSON.parse(xr_selected);
var curPagedata=selectJson.data;
var dataItem = treeView.dataItem(e.node);
/**
  * 保存curPagedata和dataItem合并后产生新对象,若dataItem中有与curPagedata相同的key,
  * 默认dataItem将会覆盖curPagedata的值
  */
if(curPagedata){
dataItem=$.extend( curPagedata, dataItem);
}
dataItem=JSON.stringify(dataItem);
if(selectJson.openModel=="jsp"){//加载一个jsp页面
loadJsp(selectJson.divId,selectJson.url,dataItem);
}else  if(selectJson.openModel=="window"){//打开一个窗口
openXrWindow(selectJson.divId,selectJson.width,
selectJson.height,selectJson.minHeight,selectJson.winTitle,
"/home/loadView",{"jsppath":selectJson.url,"jsondata":dataItem})
}
}
}
//当树形数据前有复选框时记录菜单的默认选中以及记录重新选中的菜单
if(xr_tree_checkbox){
treeView.dataSource.bind("change",getChangeValue);
function getChangeValue(){
    var checkedNodes = [];
    checkedNodeIds(treeView.dataSource.view(), checkedNodes);
    for (var k = 0; k < checkedNodes.length; k++) {
   if(typeof checkedNodes[k]!="string"){
   checkedNodes.splice(k,1);
   k= k-1;  
   }
    }
//console.log(checkedNodes);
}
//把选择的菜单的ID放在数组checkedNodes中
function checkedNodeIds(nodes, checkedNodes) {
    for (var m=0;m<nodes.length;m++){
    if(nodes[m]){
    checkedNodes.push(nodes[m])
    }
    }
    for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].checked) {
            if(!contains(checkedNodes,nodes[i].ID)){
            if(nodes[i].ID){
            checkedNodes.push(nodes[i].ID);
            }
}
            setParentChecked(checkedNodes,nodes[i]);
        }
        if (nodes[i].hasChildren) {
            checkedNodeIds(nodes[i].children.view(), checkedNodes);
        }


    }
}
/**
* 递归的选择父类
*/
function setParentChecked(childNodes,node){
if(node.SUP_ID!="0"){
for (var j = 0; j < childNodes.length; j++) {
if(typeof childNodes[j]!="string"){
if(childNodes[j].ID==node.SUP_ID){
if(!contains(childNodes,childNodes[j].ID)){
if(childNodes[j].ID){
childNodes.push(childNodes[j].ID);
}
}
setParentChecked(childNodes,childNodes[j])
}
}

}
}

}
}
/**
  * 判断数组中是否包含某个元素
  */
function contains(arr, obj) {
  var i = arr.length;
  while (i--) {
    if (arr[i] === obj) {
      return true;
    }
  }
  return false;
}
});
});
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值