本文記錄的是帶領成員開發一個小模塊功能的時候,需要用到彈出窗口加載樹狀級聯單位選擇,最后決定用采用jQuery+EasyUI插件進行開發。但是在使用EasyUI中tree的插件時,碰到了不少麻煩。為了提供彈出樹的顯示速度,就采用異步加載數節點值,首先先加載根節點,然后根據點擊的節點展開加載子節點。
往往結果和預期的都不一樣,困惑了幾天,展開后子節點是動態加載了,但是收縮后無法清空之前填充的數據;第二次在展開時,子節點又被重復加載了一遍,造成了數據重復顯示,并沒有提供清除子節點的方法。想盡了各種辦法來解決這個問題,只能換另一種形式加載子節點的值了,把每一個節點值保存起來,判斷是否已經存在,存在就不在去加載。
兩種方法見實例:
頁面getTreeNode.ashx返回樹節點JSON格式數據:
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;
}
}
}
小弟在此獻丑了,不知道各位專家、同仁有沒有遇到類似的問題,或者有其它更好的解決辦法,歡迎在這交流。
新聞熱點
疑難解答