estJS动态生成树问题求助

GOD_cheng 2012-09-12 11:48:07

我要实现的功能是

左边是一个树结构,右边是一个页面,根据点击左侧树的节点(包括子结点和叶子),向右侧页面传递一个参数id ,后台根据id在右边页面显示数据。

小弟不知道节点事件和参数传递在哪里加?请大神指点!


部分代码如下:
js文件
Ext.onReady(function() {
Ext.BLANK_IMAGE_URL = "Extjs3.2.0/resources/images/default/s.gif";
var Tree = Ext.tree;
var tree = new Tree.TreePanel({
el: 'west_content', //渲染到
useArrows: true,
autoHeight: true,
split: true,
lines: true,
autoScroll: true,
animate: true,
enableDD: true,
border: false,
containerScroll: true,
loader: new Tree.TreeLoader({
dataUrl: 'ServletHandlers/GetTrees.ashx'
})
});
var root = new Tree.AsyncTreeNode({
text: 'ICD10-疾病编码',
draggable: true,
id: '0'
});
tree.setRootNode(root);
tree.render();
// root.expand();


后台动态生成的树

public void ProcessRequest(HttpContext context)
{
string strSql = "select ID,ParentID,KindName from EMR_ICD10KIND";
dbOperator db = new dbOperator();
DataTable dt = db.Execute(strSql);
string strResult = "[";
if (dt.Rows.Count > 0)
{
DataRow[] dr = dt.Select("ParentID='1'");
strResult = DtTreeToJson(dt, strResult, dr);
}
strResult += "]";
context.Response.ContentType = "text/plain";
context.Response.Write(strResult.ToString());
context.Response.End();
}

private static string DtTreeToJson(DataTable dt, string strResult, DataRow[] dr)
{
if (dr.Length > 0)
{
for (int i = 0; i < dr.Length; i++)
{

strResult += "{";
strResult += "text:'" + dr[i]["KindName"] + "',";
strResult += "id:'" + dr[i]["ID"] + "',";
DataRow[] drChild = dt.Select("ParentId='" + dr[i]["ID"] + "'");
if (drChild.Length > 0)
{
string id = string.Empty;
strResult += "leaf:false,";
// strResult += "listeners:{\"click\":function(node,event){alert(node.text) ;"++"}},";
// strResult += "href:'toDiseaseDetail.aspx?ID="++"',";
strResult += "href:'toDiseaseDetail.aspx',";
strResult += "hrefTarget:'main',";
// strResult += " listeners: { \"click\": function(node, e){ alert(node.id) } }";
strResult += "children:[";
strResult = DtTreeToJson(dt, strResult, drChild);
strResult += "]";
}
else
{
strResult += "href:'toDiseaseDetail.aspx',";
strResult += "hrefTarget:'main',";
strResult += "leaf:true";
}

strResult += "}";

if (i != dr.Length - 1)
strResult += ",";
}
}
return strResult;
}
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
未知数 2012-09-12
  • 打赏
  • 举报
回复
那几句不是注释了么,再说click不用在每个节点都加吧?加到treePanel对象上就可以了
我都不知你想说什么了......
难道你认为在后台写的json字符串就可以触发后台事件?
GOD_cheng 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
引用 1 楼 的回复:
tree.on('click',function(item){
alert(item.id);
})

自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构


前台处理,怎么显示查询数据呢?

ajax啊,你既然用了ext,那么只……
[/Quote]
strResult += "listeners:{\"click\":function(node,event){alert(node.text) ;"++"}},";
在这里面加还是在
引用 1 楼 的回复:
tree.on('click',function(item){
alert(item.id);
})
这个函数里面改变src? 好像两个函数都可以触发节点点击。href属性可以加参数吗?

GOD_cheng 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:
引用 1 楼 的回复:
tree.on('click',function(item){
alert(item.id);
})

自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构


前台处理,怎么显示查询数据呢?

ajax啊,你既然用了ext,那么只……
[/Quote]

strResult += "listeners:{\"click\":function(node,event){alert(node.text) ;"++"}},";
里面添加还是
tree.on('click',function(item){
alert(item.id);
})
这个里面改变呢?好像两个都触发节点点击事件。。
未知数 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
tree.on('click',function(item){
alert(item.id);
})

自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构


前台处理,怎么显示查询数据呢?
[/Quote]
ajax啊,你既然用了ext,那么只能抛弃那些服务器控件了,因为生成的元素都是触发前台事件(服务器事件本来就是畸形存在,每次触发都需要重新加载页面)
使用ajax的方式加载后台数据
表单及参数通过ajax提交,然后在回调函数中获取服务器返回的值,再局部刷新页面

就像你现在一样,你想后台要获取选择的id,但点击tree节点是不会触发后台事件的,你只能用ajax提交后才能在服务器获取到这个值

不过你这儿还是有办法,右边是另一个页面的话,可以直接前台给iframe的src重新赋值跳转页面,把id通过地址栏参数传递,那么右边页面服务器的load事件里可以接收到这个参数
GOD_cheng 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
tree.on('click',function(item){
alert(item.id);
})

自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构
[/Quote]

前台处理,怎么显示查询数据呢?
未知数 2012-09-12
  • 打赏
  • 举报
回复
tree.on('click',function(item){
alert(item.id);
})

自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧