源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅析jQuery EasyUI中的tree使用指南

  • 时间:2022-07-24 08:19 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅析jQuery EasyUI中的tree使用指南
  本文记录的是带领成员开发一个小模块功能的时候,需要用到弹出窗口加载树状级联单位选择,最后决定用采用jQuery+EasyUI插件进行开发。但是在使用EasyUI中tree的插件时,碰到了不少麻烦。为了提供弹出树的显示速度,就采用异步加载数节点值,首先先加载根节点,然后根据点击的节点展开加载子节点。   往往结果和预期的都不一样,困惑了几天,展开后子节点是动态加载了,但是收缩后无法清空之前填充的数据;第二次在展开时,子节点又被重复加载了一遍,造成了数据重复显示,并没有提供清除子节点的方法。想尽了各种办法来解决这个问题,只能换另一种形式加载子节点的值了,把每一个节点值保存起来,判断是否已经存在,存在就不在去加载。   两种方法见实例:
[u]复制代码[/u] 代码如下:
var treeTitle = '选择列表'; var treeUrl = '../DataAshx/getTreeNode.ashx?pid=-1'; var nodeExp=false; var nodekeep=""; var rows; var noinf=0; $(function() {     $('#treewindow').window({         title: treeTitle,         width: 400,         height: 400,         modal: true,         shadow: false,         closed: true,         resizable: false,         maximizable: false,         minimizable: false,         collapsible: false     }); }); function treeWindowOpen(name,rowIndx) {     $('#treewindow').window('open');     nodekeep="";     nodeExp=false;     rows=rowIndx.toString();     $('#basetree').tree({         checkbox: true,         animate: true,         url: treeUrl+"&coln="+escape(name.toString()),         cascadeCheck: true,         onlyLeafCheck: false,         onBeforeExpand: function(node, param) { //------------第一种方法:异步加载子节点值------------- //            $('#basetree').tree('options').url = "../DataAshx/getTreeNode.ashx?pid=" + node.id+"&coln="+escape(name.toString()); //------------第二种方法:Ajax方法返回子节点Json值,使用append方法加载子节点               $.ajax({                 type: "POST",                 url: "../DataAshx/getTreeNode.ashx?pid=" + node.id+"&coln="+escape(name.toString())+"&casn="+escape(node.attributes.cas.toString()),                 cache: false,                 async: false,                 dataType: "json",                 success: function(data) {                     if(nodekeep.indexOf(node.id)==-1)                     {                      append(data, node);                      nodeExp = true;                     }                 }             });             $("#radCollapse").removeAttr("checked");         },         onLoadError:function(Error)         {             $.messager.alert('提示', '查询语句出错', 'error');             if(nodeExp==false)             {                 $("#basetree").children().remove();             }         },         onLoadSuccess:function(success)         {             var child=$("#basetree").children().length;             noinf++;             if(child==0&&noinf>1)             {                 $.messager.alert('提示', '数据不存在', 'Info');             }         }     }); } function treeWindowClose() {     $('#treewindow').window('close');     nodekeep="";     nodekeep=false; } function treeWindowSubmit() {     var nodes = $('#basetree').tree('getChecked');     var info = '';     if (nodes.length > 0) {         for (var i = 0; i < nodes.length; i++) {             if (info != '') { info += ','; }             info += nodes[i].text;         }         //alert(JSON.stringify(nodes));     }     else {         var node = $('#basetree').tree('getSelected');         if (node != null) {             info = node.text;                        }     }     $("#"+rows).val(info);     $('#treewindow').window('close');     nodekeep="";     nodeExp=false; } //全部展开 function collapseAll() {     $("#radCollapse").attr("checked", "checked");     var node = $('#basetree').tree('getSelected');     if (node) {         $('#basetree').tree('collapseAll', node.target);     } else {         $('#basetree').tree('collapseAll');     } } //全部收缩 function expandAll() {     var node = $('#basetree').tree('getSelected');     if (node) {         $('#basetree').tree('expandAll', node.target);     } else {         $('#basetree').tree('expandAll');     } } //增加子节点 function append(datas,cnode) {     var node = cnode;     $('#basetree').tree('append', {         parent: node.target,         data: datas     });     nodekeep+=","+node.id; } //重新加载 function reload() {     var node = $('#basetree').tree('getSelected');     if (node) {         $('#basetree').tree('reload', node.target);     } else {         $('#basetree').tree('reload');     } } //删除子节点 function remove() {     var node = $('#basetree').tree('getSelected');     $('#basetree').tree('remove',node.target); }
  页面getTreeNode.ashx返回树节点JSON格式数据:
[u]复制代码[/u] 代码如下:
<%@ WebHandler Language="C#" Class="getTreeNode" %> using System; using System.Collections; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; using System.Collections.Generic; public class getTreeNode : IHttpHandler, System.Web.SessionState.IRequiresSessionState {     public void ProcessRequest(HttpContext context)     {         context.Response.ContentType = "text/plain";         DataTable dt = (DataTable)context.Session["viewmaintain"];         string parentId = string.Empty;         string resultStr = string.Empty;         string attributes = string.Empty;         string colName = string.Empty;         string sql = string.Empty;         string Casname = string.Empty;         bool colt = false;         string icon = "icon-profile";         if (!string.IsNullOrEmpty(context.Request.QueryString["pid"]))         {             parentId = context.Request.QueryString["pid"].ToString();         }         if ((!string.IsNullOrEmpty(context.Request.QueryString["coln"])) && (string.IsNullOrEmpty(context.Request.QueryString["casn"])))         {             colName = HttpUtility.UrlDecode(context.Request.QueryString["coln"].ToString());             if (dt != null)             {                 bool pt = true;                 while (pt)                 {                     for (int i = 0; i < dt.Rows.Count; i++)                     {                         Casname = dt.Rows[i]["view_colname"].ToString();                         if (dt.Rows[i]["view_colname"].ToString() == colName)                         {                             if (dt.Rows[i]["view_cas"].ToString() != null&&dt.Rows[i]["view_cas"].ToString() !="")                             {                                 colName = dt.Rows[i]["view_cas"].ToString();                             }                             else                             {                                 colt = true;                                 sql = dt.Rows[i]["view_sql"].ToString();                                 pt = false;                             }                             break;                         }                     }                 }             }         }         if ((!string.IsNullOrEmpty(context.Request.QueryString["casn"])) && (!string.IsNullOrEmpty(context.Request.QueryString["coln"])))         {            string casnName = HttpUtility.UrlDecode(context.Request.QueryString["casn"].ToString());            colName = HttpUtility.UrlDecode(context.Request.QueryString["coln"].ToString());             if (dt != null)             {                 for (int i = 0; i < dt.Rows.Count; i++)                 {                     Casname = dt.Rows[i]["view_colname"].ToString();                     if (dt.Rows[i]["view_cas"].ToString() == casnName && casnName != colName)                     {                         colt = true;                         sql = dt.Rows[i]["view_sql"].ToString();                         break;                     }                 }             }         }         try         {             if (parentId != "" && colt == true)             {                 //此处省略得到数据列表的代码                 List<TreeInfo> ltree = DAL_TreeInfo.GetItemValue(parentId, sql);                 resultStr = "";                 resultStr += "[";                 if (ltree.Count > 0)                 {                     foreach (TreeInfo item in ltree)                     {                         attributes = "";                         attributes += "{\"cas\":\"" + Casname;                         attributes += "\",\"val\":\"" + item._text + "\"}";                         resultStr += "{";                         resultStr += string.Format("\"id\": \"{0}\", \"text\": \"{1}\", \"iconCls\": \"{2}\", \"attributes\": {3}, \"state\": \"closed\"", item._id, item._text, icon, attributes);                         resultStr += "},";                     }                     resultStr = resultStr.Substring(0, resultStr.Length - 1);                 }                 resultStr += "]";             }             else             {                 resultStr = "[]";             }         }         catch (Exception ex)         {             resultStr = "出错";         }         context.Response.Write(resultStr);     }     public bool IsReusable     {         get         {             return false;         }     } }
    关键性的代码都已经在上面了,目前也就只能想到这种办法来解决了,有时间的话可以给tree扩展一下,添加一个清除子节点的方法,这样应该实现起来会更容易方便。   小弟在此献丑了,不知道各位专家、同仁有没有遇到类似的问题,或者有其它更好的解决办法,欢迎在这交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部