急 急 急!!!求各位zTree大神进来指点一二
zTree代码如下(后台就一个获取子节点的方法):
var setting = { check: { enable: true, chkboxType: {"Y":"ps", "N":"ps"} }, data: { simpleData: { enable: true } }, view: { dblClickExpand: false, addDiyDom: addDiyDom, showIcon: true }, async: { enable:true, url:"${ctx}/system/dict/getChildDict.action", autoParam: ["id"], dataFilter: ajaxDataFilter }, callback: { beforeClick: beforeClick, onCheck: onCheck, onAsyncSuccess : onAsyncSuccess } }; var zNodes =[ <s:iterator value="dictList" var ="x" status="dict"> <s:if test="#dict.index > 0">,</s:if> {id:"${x.id}", pId:"${x.pcode}", name:"${x.caption}", open:true} <s:iterator value="dictList2" var ="y" status="dict2"> ,{id:"${y.id}", pId:"${y.pcode}", name:"${y.caption}", open:false,isParent:true} </s:iterator> </s:iterator> ]; //对AJAX返回的值进行处理 function ajaxDataFilter(treeId, parentNode, json) { if (json) { for(var i = 0; i < json.length; i++) { json[i].name = json[i].caption; json[i].pId = json[i].pcode; } } return json; }; function onAsyncSuccess(event, treeId, treeNode, json) { for(var i = 0;i < treeNode.children.length; i++){ treeNode.children[i].open = true; treeNode.children[i].isParent = true; treeNode.children[i].zAsync = false; } }; //点击叶子节点 function beforeClick(treeId, treeNode) { tree.checkNode(treeNode, !treeNode.checked, null, true); return false; } //钩选时 function onCheck(e, treeId, treeNode) { read1(treeNode); nodes = tree.getCheckedNodes(true); for (var i=0, l=nodes.length; i<l; i++) { tree.checkNode(nodes[i],false,false,false); } tree.checkNode(treeNode,true,false,false); } var tree = $("#treeList"); $(function(){ createTree(); }); function createTree(){ tree = $.fn.zTree.init(tree, setting, zNodes); };
页面显示效果如下:
想要的效果是:到湖北省宜昌市下的子节点因为没有子节点了,所以应该没有加号和图标。求各位大神指点下,如何在没有子节点的时候,该节点不显示加号和图标
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(21)
回复
对啊,有两个地方设置了,改成false的话,就只能显示一级子节点了,不知道这个属性应该放在哪个位置合适
回复
可是我看你的代码只是设置 open =false ; isParent 始终都是true 呀
开始写zNodes的时候,就写了还一个dictListt,页面只显示跟节点下的子节点,子节点下的子节点就没显示出来,所以定义了dictList2取其他的节点,对于你说的生成数据就知道哪些有子节点,或者没有子节点,不是狠明白,希望能占用你一点时间来看看。
我贴的是整个的zTree的代码,确实有点多了。你说的这个设置,我试了的,好像没什么效果,isParent = true/false,在上述代码中在两个位置都用了的。
回复
难道你后台就不能动态决定某个节点的 isParent 是 false 还是 true 吗?
hoho, 其实 zTree 这个问题也很简单呀,就是代码贴的太多了,让别人以为 zTree 比 jstree 麻烦;其实就是个 父节点属性设置的问题。而且这个问题主要出在生成数据的问题上了。
你生成数据时应该能知道那些节点有子节点,哪些没有子节点, 那么没有子节点的数据生成时就设置 isParent = false 不就行了嘛??
你用过ztree么?用了就知道谁好用了.
@loyal 木有崇洋媚外的意思,只是jstree用了很久,提出的这个问题解决起来就没有上述大侠们所建议的复杂,所以就这个问题来说的是“更好用”。
回复
那是他没有看文档.就算换jstree不看文档也照样 会写成照样的.
jstree更好用
jstree更好用
isParent:true。。。
额,这有么联系?
楼主,我是宜昌的!
如上面的handleChannles方法产生的那个list,然后最后可以直接把这个list交给json库比如fastjson等让他们直接转成json字符串返回。
,{id:"${y.id}", pId:"${y.pcode}", name:"${y.caption}", open:false,isParent:true} 设置了isParent:true啊,如果取消addDiyDom的话,就全部没有加号和图标了
回复
如果要这样模板生成的话,你只能写if语句控制是否要输出isParent:true了,个人看法是返回json数据的话,最好不采用模板,而是后台代码构造Map填充好之后,用json库直接生成String这样可以得到最大的灵活性
额,本人比较愚钝,接触这个没多久,所以不是很懂你的意思。就是说不在JS里面写isParent为true,用后台取到传回页面的josn吗?
回复
只是个人理解了,用jsp或者其他模板的意义只是想把数据本身和无关的呈现样式分离开,把数据插入到样式中。而json本身就单纯是数据,最适合的方式还是用原始的Servlet的IO流的方式直接返回。== 我贴下我demo的代码
关键是你数据是怎样的,如果节点数据没有children也没有设置isParent为true的话,是不会显示成这种文件夹的形式的。做的时候建议先多看下官方提供的demo的代码
两个办法,一个是后台的数据库里面增加一个字段isParent,标记是否还有子节点,还有一个是查询数据的时候顺便查下是否还有子节点,总之,返回来的json数据多一个isParent这样的标记就可以了。