이 기사에는 멤버들이 작은 모듈 기능을 개발할 때 팝업 창을 사용하여 트리형 캐스케이드 단위 선택 사항을 로드해야 했고 마침내 개발을 위해 jQuery EasyUI 플러그인을 사용하기로 결정했다고 기록되어 있습니다. 그런데 EasyUI에서 tree 플러그인을 사용하면서 많은 고민에 부딪혔습니다. 팝업 트리의 표시 속도를 향상시키기 위해 노드 값의 비동기 로딩을 사용합니다. 먼저 루트 노드가 로드되고 클릭된 노드에 따라 하위 노드가 로드됩니다.
종종 결과가 예상과 다르기 때문에 며칠간 혼란스러웠습니다. 확장 후에는 하위 노드가 동적으로 로드되지만 축소 후에는 두 번째 확장 시 이전에 채워진 데이터가 지워지지 않습니다. , 하위 노드가 다시 로드됩니다. 다시 한 번 데이터가 반복적으로 표시되며 하위 노드를 지울 수 있는 방법이 없습니다. 이 문제를 해결하기 위해 다양한 방법을 시도한 결과, 다른 형태로 자식 노드의 값만 로드할 수 있으며, 각 노드 값을 저장하고 이미 존재하는지 확인하면 로드하지 않고 로드할 수 있습니다.
두 가지 방법의 예를 참조하세요.
页면 getTreeNode.ashx返回树节点JSON格式数据:
공용 클래스 getTreeNode : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
공개 무효 ProcessRequest(HttpContext 컨텍스트)
{
context.Response.ContentType = "텍스트/일반";
DataTable dt = (DataTable)context.Session["viewmaintain"];
문자열 parentId = string.Empty;
문자열 resultStr = string.Empty;
문자열 속성 = string.Empty;
문자열 colName = 문자열.Empty;
문자열 sql = 문자열.Empty;
문자열 Casname = string.Empty;
bool colt = false;
문자열 아이콘 = "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;
동안(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();
}
그 외
{
콜트 = 사실;
sql = dt.Rows[i]["view_sql"].ToString();
pt = 거짓;
}
휴식;
}
}
}
}
}
if ((!string.IsNullOrEmpty(context.Request.QueryString["casn"])) && (!string.IsNullOrEmpty(context.Request.QueryString["coln"])))
{
문자열 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)
{
콜트 = 사실;
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}", "attributes": {3}, "state": " 닫힘"", item._id, item._text, 아이콘, 속성);
resultStr = "},";
}
resultStr = resultStr.Substring(0, resultStr.Length - 1);
}
resultStr = "]";
}
그 외
{
resultStr = "[]";
}
}
catch (예외예외)
{
resultStr = "출수";
}
context.Response.Write(resultStr);
}
공개 bool은 재사용 가능
{
얻다
{
false를 반환합니다.
}
}
}
小弟는 此献丑了, 不知道各位专家, 同仁有没有遇到类似的问题, 或者有其它更好的解决办法,欢迎在这交。