我要实现的功能是 左边是一个树结构,右边是一个页面,根据点击左侧树的节点(包括子结点和叶子),向右侧页面传递一个参数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;
}
alert(item.id);
})自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构
使用ajax的方式加载后台数据
表单及参数通过ajax提交,然后在回调函数中获取服务器返回的值,再局部刷新页面就像你现在一样,你想后台要获取选择的id,但点击tree节点是不会触发后台事件的,你只能用ajax提交后才能在服务器获取到这个值不过你这儿还是有办法,右边是另一个页面的话,可以直接前台给iframe的src重新赋值跳转页面,把id通过地址栏参数传递,那么右边页面服务器的load事件里可以接收到这个参数
strResult += "listeners:{\"click\":function(node,event){alert(node.text) ;"++"}},";
里面添加还是
tree.on('click',function(item){
alert(item.id);
})
这个里面改变呢?好像两个都触发节点点击事件。。
在这里面加还是在
引用 1 楼 的回复:
tree.on('click',function(item){
alert(item.id);
})
这个函数里面改变src? 好像两个函数都可以触发节点点击。href属性可以加参数吗?
我都不知你想说什么了......
难道你认为在后台写的json字符串就可以触发后台事件?