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;
}
}
}
树形结构有时候数据很多,我们在后台加载树形数据或在前台页面一下子加载树形数据会造成性能和网络问题,而客户一般并不需要看树形结构的全部内容。
这个时候,我们应该选择异步加载。也就是只有在客户点击上层树形结构时,才去服务器查询该上层结构的孩子节点,根据服务器返回的数据动态创建孩子节点。
前台代码:
$("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;
}
}
}
相关文章推荐
- Android UI布局
- MySQL5.5.28启动错误 The server quit without updating PID file
- Microsoft.Crm.Setup.SrsDataConector.RegisterServerAction 操作失败 Requested value 'Geo' was not found 的解决方法
- 【CSS】媒体查询(media query)满足某个样式时执行某些CSS样式
- 将织梦dedecms后台编辑器更改为Ueditor
- hdu 3397 Sequence operation 线段树
- iOS UILABEL \UIIMAGE复制
- Android UI
- NSURLRequest 官方文档 详析
- 网页中集成SAP的WebGUI,可以指定用户名、密码、事务码
- UITabBarController自定义(一)
- UIScrollView属性全总结
- netduino plus2简介
- C# 通过线程更新UI
- 快速排序_quick_sort
- 【PAT1014】 Waiting in Line (30) queue模拟排队
- Codeforces 392C Yet Another Number Sequence(矩阵快速幂)
- 【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
- UIView
- uiimage截取一部分, iOS6/7 deltas