您的位置:首页 > 产品设计 > UI/UE

EasyUi中tree插件的异步加载

2014-02-21 00:00 453 查看
摘要: EasyUi中tree插件的异步加载

树形结构有时候数据很多,我们在后台加载树形数据或在前台页面一下子加载树形数据会造成性能和网络问题,而客户一般并不需要看树形结构的全部内容。

这个时候,我们应该选择异步加载。也就是只有在客户点击上层树形结构时,才去服务器查询该上层结构的孩子节点,根据服务器返回的数据动态创建孩子节点。

前台代码:

$("ul[id$=browser]").tree({
url: "ashx/getMenuByRuleId.ashx?ruleId=" + window.ruleId,
onClick: function (node) {
if (node.attributes.NodeType == "0") {
//增加自定义功能
}
},
animate: true
});
});

后台代码:

public class getMenuByRuleId : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string ruleId = context.Request.QueryString["ruleId"].ToString().Trim();
TableService.ITableService tableService = new TableService.TableServiceClient();
DataTable dt = tableService.GetTableListByRulerID(ruleId);
if (context.Request.QueryString["ruleId"] != null && context.Request.QueryString["ruleId"].ToString().Trim() != "" && context.Request.Params["id"] == null)
{
context.Response.Write("[" + createJsonDataList("", dt) + "]");
}
else if (context.Request.Params["id"] != null && context.Request.Params["id"].ToString().Trim() != "")
{
context.Response.Write("[" + createJsonDataList(context.Request.Params["id"].ToString().Trim(), dt) + "]");
}
context.Response.End();
}

/// <summary>
///
/// </summary>
/// <param name="strPid"></param>
/// <returns></returns>
// NODETYPE==-1开始 NODETYPE==0文件夹 NODETYPE==3文件 传入pid
private string createJsonDataList(string strPid,DataTable dtAll)
{
DataRow[] drs=dtAll.Select(" pid='"+strPid+"' ");
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < drs.Length; ++i)
{
string strNodeType = drs[i]["NODETYPE"].ToString().Trim();
string strNodeId = drs[i]["ID"].ToString().Trim();
string strNodeText = drs[i]["NAME"].ToString().Trim();
bool hasChild = false;
if (strNodeType == "-1" || strNodeType == "0")
{
hasChild = true;
}
sb.Append(createJsonData(strNodeId, strNodeText, hasChild));
sb.Append(",");
}
return sb.ToString().Trim().Substring(0,sb.ToString().Trim().Length-1);
}

private string createJsonData(string strId,string strText,bool hasChild)
{
StringBuilder sb = new StringBuilder("");
sb.Append("{\"id\":\"" + strId + "\",\"text\":\"" + strText + "\",");
if (hasChild)
{
sb.Append("\"state\":\"closed\",\"attributes\":{\"NodeType\":\"1\"}");
}
else
{
sb.Append("\"state\":\"open\",\"attributes\":{\"NodeType\":\"0\"}");
}
sb.Append("}");
return sb.ToString().Trim();
}

public bool IsReusable {
get {
return false;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: