一个ext的多选树tree,首次加载的时候只把root下的第一层节点展现出来
当选择这一层节点的某个节点时,此节点自动展开刷新,load此节点的子节点并自动选中、
之后使用js去取所有选中的节点load是执行后台查询数据库,ajax方法....
可ajax方法是异步处理的,后台数据还没load完,取所有选中节点的方法已经执行了...
所以我只能取到最开始加载的那个节点...
悲剧啊...
注意红色的那句话...效率问题哈,然后再请各位大大大大大大大大 哥 and 姐们帮帮忙 给点意见
比如我可不可以做同步,有什么好的办法setTimeout已经试过了,无效...

解决方案 »

  1.   

    首次加载的时候只把root下的第一层节点展现出来这样的话是异步取数据。单击第一层数据会将该数据的id传到后台。如后返回数据,主要是在后台操作要是同步的话就一次性全部返回树节点数据
      

  2.   

    恩,是,有个问题,如果我想实现取得所有的节点的话我只需要一个 expandAll();就OK了
    但是这样的话效率是个很严重的问题
    后台我不知道用什么办法去定义节点间的层次关系...所以目前只能取一层
    方法如下:public string NodeLoad(string nodeID, string checkFlg)
    {
    if (nodeID == "root" | string.IsNullOrEmpty(nodeID))
    {
    nodeID = Guid.Empty.ToString();
    }
    Search infoSearch = new Search(typeof(CatelogInfo));
    infoSearch.AddItem("ParentID", nodeID, SearchOperator.Equal);
    List<CatelogInfo> lstCatelog = _bllCatelog.Search(infoSearch); Coolite.Ext.Web.TreeNodeCollection nodes = new Coolite.Ext.Web.TreeNodeCollection(); foreach (CatelogInfo info in lstCatelog)
    {
    AsyncTreeNode asyncNode = new AsyncTreeNode();
    asyncNode.NodeID = info.ID.ToString();
    asyncNode.Text = info.Name;
    if (bool.TrueString.ToLower().Equals(checkFlg))
    {
    asyncNode.Checked = ThreeStateBool.True;
    }
    else
    {
    asyncNode.Checked = ThreeStateBool.False;
    }
    nodes.Add(asyncNode);
    }
    return nodes.ToJson();
    }
      

  3.   

    貌似AJAX可以加一个插件(国内牛人写的)后,请求加个同步参数就可以将请求变为同步了。
      

  4.   

    各种大大大大大大大大 哥 and 姐们,大家早上好,我继续顶贴,问昨天那个问题...有没有解决方案呢比如如何取得所有的节点,我的方法可以怎么改,我就是想知道怎么把树的层次结构给体现出来
      

  5.   

    tree添加load事件,回调函数里执行选取
      

  6.   

    <Loader>
          <ext:PageTreeLoader RequestMethod="GET" PreloadChildren="true">
                 <EventMask ShowMask="true" Target="Parent" Msg="正在加载数据,请等待..." />
          </ext:PageTreeLoader>
    </Loader>
    我在页面时这么进行加载的,请问 gdfloyd ,像你说的写load事件该怎么做呢?
      

  7.   

    在ajax回调函数中调用 取所有选中的节点 的函数