现在有一个产品类别树,在页面上我想显示出类别树底下的具体产品,具体做法是先将类别树显示出来,然后再类别树下添加具体产品,可是电脑报内存溢出。请问如何解决这个问题,高手指导~

解决方案 »

  1.   

    d = new dTree('d');
    d.config.folderLinks=true;
    //id, pid, name, url, title, target, icon, iconOpen, open
    d.add(0,-1,'产品类别','','产品类别','_parent');
     <logic:notEmpty name="wmsProType">
    <logic:iterate id="pt" name="wmsProType" scope="request">
    <script type="text/javascript">
    d.add('${pt.wptId}','${pt.wmsProType.wptId}','(${pt.wptName})','','${pt.wptName}','_parent');
    t = new dTree('t');
    t.config.folderLinks=true;
    </script>
                                    <logic:iterate id="wp" name="pt" property="wmsProducts">
                                    <logic:equal value="1" name="wp" property="wprStates">
    <script type="text/javascript">
    alert('${wp.wprName}')
    var id='${pt.wptId}';
    var id1='${wp.wprId}';
    var name1='${wp.wprName}';
    if(id1!=null&&id1!=""){
    t.add(id1,id,name1,"",name1,'_parent');
    }
    </script>
                                    </logic:equal>
                                    </logic:iterate>
    <script type="text/javascript">
    document.write(t);
    t.openAll();
    </script>
                     <%count++;%>
    </logic:iterate>
    <script type="text/javascript">
    document.write(d);
    d.openAll();
    </script>
                </logic:notEmpty>
      

  2.   

    这个是我新建树
      t = new dTree('t');
                            t.config.folderLinks=true;
    如果放原来的树里就出现内存溢出~
      

  3.   

    Stack overflow at line:327
    弹出来的
      

  4.   

    看不太懂,但应该是循环的问题,感觉你应该把t = new dTree('t');放在循环外面。
    只要用t添加就行了,不用每次都new。
    貌似 <script type="text/javascript">      也应该放在循环外面。
      

  5.   

    很久不用dTree啦,我记得我以前的做法是在后台生成xml,然后传给dtree生成树。
    你是在做动态的添加么?不知道dtree是否支持这样的操作,栈溢出让我很怀疑。现在又很多支持异步的树可以选择的,是在不行可以考虑换换,比如 jsTree;
    dtree帮不了你太多,等高手吧。
      

  6.   

    只需要一个 JavaScript标签 把整个 js代码括起来就行的吧。有可能是进入死循环了。
      

  7.   

    d = new dTree('d');
                d.config.folderLinks=true;
                //id, pid, name, url, title, target, icon, iconOpen, open        
                d.add(0,-1,'产品类别','','产品类别','_parent');
     <logic:notEmpty name="wmsProType">
                        <logic:iterate id="pt" name="wmsProType" scope="request">
                            <script type="text/javascript">                
                            d.add('${pt.wptId}','${pt.wmsProType.wptId}','(${pt.wptName})','','${pt.wptName}','_parent');
                            t = new dTree('t');//这里为什么要new 一个树呢??                        t.config.folderLinks=true;
                            </script>
                                    <logic:iterate id="wp" name="pt" property="wmsProducts">
                                    <logic:equal value="1" name="wp" property="wprStates">
                                        <script type="text/javascript">    
                                            alert('${wp.wprName}')    
                                            var id='${pt.wptId}';
                                            var id1='${wp.wprId}';
                                            var name1='${wp.wprName}';
                                            if(id1!=null&&id1!=""){
                                                t.add(id1,id,name1,"",name1,'_parent');
                                            }
                                        </script>
                                    </logic:equal>
                                    </logic:iterate>
                                    <script type="text/javascript">
                                        document.write(t);
                                        t.openAll();
                                    </script>
                                <%count++;%>
                        </logic:iterate>
                    <script type="text/javascript">
                        document.write(d);
                        d.openAll();
                    </script>
                </logic:notEmpty>     
    我记得dtree是通过一个参数来指定父子节点关系的.如果我没记错应该是第二个.你要做的首先是添加一个根节点,
    d.add(0,-1,'产品类别','','产品类别','_parent');//你已经做了,这个根节点ID为0 父节点id为-1然后把所有的类别遍历添加到 0这个节点下,所以
    d.add('${pt.wptId}','${pt.wmsProType.wptId}','(${pt.wptName})','','${pt.wptName}','_parent'); 可能有点问题,应该把表示父节点的那个参数设置为0.然后在每个类别下遍历出产品.所以不用new一个树,继续在d上添加就可以了.把父节点参数设置为当前产品的类别的id就可以了.
      

  8.   

                            <script type="text/javascript">                
                            d.add('${pt.wptId}','${pt.wmsProType.wptId}','(${pt.wptName})','','${pt.wptName}','_parent');
                            t = new dTree('t');
                            t.config.folderLinks=true;
                            </script>
    这里的问题,new太多了,似乎直接d.add(***,t,*****,**那样就可以。我加过1000个没溢出。
      

  9.   

    肯定是死循环,建议楼主先不要在数据库里取数据,自己写个静态的试试。
    这样的问题,你只能信心点,自己调调,找到问题所在,别人很难帮你。估计是你的逻辑写的有问题。
    感觉你应该把t = new dTree('t');放在循环外面。 
    只要用t添加就行了,不用每次都new。 
    貌似 <script type="text/javascript">      也应该放在循环外面。 
      

  10.   


    你引用几张表也不能这么做,dTree接受的是数据,它不管是几张表的数据,只要你的数据本身是树形,到时它会自动添加,逻辑它本身已经控制好了。不用你自己控制。
    你现在的问题是你根本就不会用dTree,建议你写点静态数据,自己测一下你就明白了。
      

  11.   

    dtree用法是传入子节点和父节点,但是我现在这个数据就是树形的,只是页面上显示的时候要循环,迭代的时候出现内存溢出的问题~
      

  12.   


    你怎么听不懂我的话啊,你的思路有问题
    new dTree('t');肯定是要new一次,他只管数据和你有几张表没关系,你这孩子怎么听不懂中国话啊。
    换句话说只要你这两张的数据没有问题(要有父子关系)就能显示。
    如果你这两张表的数据有问题,你就是用100个dTree你同样显示不了。
    明白没?
      

  13.   

    你的意思是说用一个tree就可以了?
      

  14.   

    但是我这个怎么放呢? d.add('${pt.wptId}','${pt.wmsProType.wptId}','(${pt.wptName})','','${pt.wptName}','_parent'); 
    两个循环~大哥~
      

  15.   

    也就是说我不能一次就给好它id,pid。我要分两次给,一个tree不好两次add的,会报内存溢出的~我试过。
      

  16.   

    好了~是ID重名冲突的问题,还是用一个tree.谢谢各位了~