easyui tree打开新节点清除缓存问题

来源:互联网 发布:java程序员做什么 编辑:程序博客网 时间:2024/05/17 08:15

        近期在写项目权限时需要用到easyui的tree控件做一个部门树,权限查看的时候需要看到有关选中的部门,也就是说添加完权限的时候需要查看哪些部门被选中,直白的就是部门树前面checkbox处于被选中状态。但是出现了这样一个问题,当打开权限界面查看任一菜单权限的时候是对的,打开第二个菜单的时候,第二个菜单的权限会连同上个菜单的权限一并被选中,我debug跟踪过,每次触发方法的时候都是传的当前的菜单id,去数据库表中查的,经过在js里调试几次,才知道这是由于tree里的缓存没清除。查查easyui的api,tree没有清除缓存的方法,于是我再网上查了些资料,说道ajax的cache:false时可以清除缓存,但我加上在这里无用。查了半天耽误了不少时间,也没有进展。于是自己查看下tree的其他方法在底层是怎么实现的,着手在底层写一个clear方法。在jquery.easyui.min.js里找到tree方法这就是实现tree的方法。具体如下:

                               

            在里面添加clear函数,红色框内即为实现清除tree缓存的js,代码如下:

                                                        clear:function(jq){
                                                              return jq.each(function(oj){
                                                              var tree=$.data(this,"tree").tree;
                                                              tree.find("div.tree-node-selected").removeClass("tree-node-selected");
                                                              var cc=tree.tree("getChecked");
                                                             for(var i=0;i<cc.length;i++){
                                                                   tree.tree("uncheck",cc[i].target);
                                                                     }
                                                          });可直接拷贝,无需改动。前台js代码如下:

                                                                 $('#treeid').tree("clear");


      示例图:查看系统管理权限的时候,点击部门权限,弹出一个部门树,有两个部门被选中:

      

在查看组织结构权限的时候权限是条件保障室,党委办公室但会把上次菜单查看的权限一并带上:


0 0
原创粉丝点击