本文記錄的是帶領成員開發一個小模組功能的時候,需要用到彈出窗口加載樹狀級聯單位選擇,最後決定用採用jQuery EasyUI插件進行開發。但在使用EasyUI中tree的外掛時,碰到了不少麻煩。為了提供彈出樹的顯示速度,就採用非同步載入數節點值,先載入根節點,再根據點選的節點展開載入子節點。
往往結果和預期的都不一樣,困惑了幾天,展開後子節點是動態加載了,但是收縮後無法清空之前填充的數據;第二次在展開時,子節點又被重複加載了一遍,造成了資料重複顯示,並沒有提供清除子節點的方法。想盡了各種辦法來解決這個問題,只能換另一種形式載入子節點的值了,把每一個節點值保存起來,判斷是否已經存在,存在就不在去載入。
兩種方法見實例:
頁面getTreeNode.ashx傳回樹節點JSON格式資料:
公共類別 getTreeNode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
DataTable dt = (DataTable)context.Session["viewmaintain"];
stringparentId = string.Empty;
字串 resultStr = string.Empty;
字串屬性 = string.Empty;
string colName = string.Empty;
字串 sql = string.Empty;
string Casname = string.Empty;
bool colt = false;
string icon = "圖示檔案";
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;
而(點)
{
for (int i = 0; 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();
}
其他
{
小馬=真;
sql = dt.Rows[i]["view_sql"].ToString();
pt = false;
}
休息;
}
}
}
}
}
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
{
Casname = dt.Rows[i]["view_colname"].ToString();
if (dt.Rows[i]["view_cas"].ToString() == casnName && casnName != colName)
{
小馬=真;
sql = dt.Rows[i]["view_sql"].ToString();
休息;
}
}
}
}
嘗試
{
if (parentId != "" && colt == true)
{
//此處省略得到列表資料的代碼
列表
resultStr = "";
resultStr = "[";
if (ltree.Count > 0)
{
foreach(ltree 中的 TreeInfo 項)
{
屬性 = "";
屬性 = "{"cas":"" Casname;
屬性 = "","val":"" item._text ""}";
resultStr = "{";
resultStr = string.Format(""id": "{0}", "text": "{1}", "iconCls": "{2}", "屬性": {3}, "狀態": "已關閉""、item._id、item._text、圖示、屬性);
resultStr = "},";
}
resultStr = resultStr.Substring(0, resultStr.Length - 1);
}
resultStr = "]";
}
其他
{
resultStr = "[]";
}
}
catch(異常前)
{
resultStr = "錯誤";
}
context.Response.Write(resultStr);
}
public bool IsReusable
{
得到
{
回復錯誤;
}
}
}
小弟在此獻醜了,不知道各位專家、同仁有沒有遇到類似的問題,或者有其他更好的解決方法,歡迎在此交流。