我要实现的功能是  左边是一个树结构,右边是一个页面,根据点击左侧树的节点(包括子结点和叶子),向右侧页面传递一个参数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;
        }

解决方案 »

  1.   

    tree.on('click',function(item){
       alert(item.id);
     })自己处理吧,ext tree不触发服务器事件,如果要将参数传递到后台请使用ajax
    其实都前台处理才是对的,界面的问题弄到服务器去处理不是合适的结构
      

  2.   

    ajax啊,你既然用了ext,那么只能抛弃那些服务器控件了,因为生成的元素都是触发前台事件(服务器事件本来就是畸形存在,每次触发都需要重新加载页面)
    使用ajax的方式加载后台数据
    表单及参数通过ajax提交,然后在回调函数中获取服务器返回的值,再局部刷新页面就像你现在一样,你想后台要获取选择的id,但点击tree节点是不会触发后台事件的,你只能用ajax提交后才能在服务器获取到这个值不过你这儿还是有办法,右边是另一个页面的话,可以直接前台给iframe的src重新赋值跳转页面,把id通过地址栏参数传递,那么右边页面服务器的load事件里可以接收到这个参数
      

  3.   


    strResult += "listeners:{\"click\":function(node,event){alert(node.text) ;"++"}},";
    里面添加还是
    tree.on('click',function(item){
         alert(item.id);
    })
    这个里面改变呢?好像两个都触发节点点击事件。。
      

  4.   

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

  5.   

    那几句不是注释了么,再说click不用在每个节点都加吧?加到treePanel对象上就可以了
    我都不知你想说什么了......
    难道你认为在后台写的json字符串就可以触发后台事件?