急 急 急!!!求各位zTree大神进来指点一二

发布于 2021-11-19 21:13:46 字数 2160 浏览 887 评论 21

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(21

奈何桥上唱咆哮 2021-11-22 04:10:24

回复
对啊,有两个地方设置了,改成false的话,就只能显示一级子节点了,不知道这个属性应该放在哪个位置合适

苍暮颜 2021-11-22 04:10:24

回复
可是我看你的代码只是设置 open =false ; isParent 始终都是true 呀

坚持沉默 2021-11-22 04:10:24

开始写zNodes的时候,就写了还一个dictListt,页面只显示跟节点下的子节点,子节点下的子节点就没显示出来,所以定义了dictList2取其他的节点,对于你说的生成数据就知道哪些有子节点,或者没有子节点,不是狠明白,希望能占用你一点时间来看看。

离不开的别离 2021-11-22 04:10:24

我贴的是整个的zTree的代码,确实有点多了。你说的这个设置,我试了的,好像没什么效果,isParent = true/false,在上述代码中在两个位置都用了的。

勿忘初心 2021-11-22 04:10:23

回复
难道你后台就不能动态决定某个节点的 isParent 是 false 还是 true 吗?

沙与沫 2021-11-22 04:10:16

 hoho, 其实 zTree 这个问题也很简单呀,就是代码贴的太多了,让别人以为 zTree 比 jstree 麻烦;其实就是个 父节点属性设置的问题。而且这个问题主要出在生成数据的问题上了。

你生成数据时应该能知道那些节点有子节点,哪些没有子节点, 那么没有子节点的数据生成时就设置 isParent = false 不就行了嘛?? 

为你鎻心 2021-11-22 04:10:08

你用过ztree么?用了就知道谁好用了.

为你鎻心 2021-11-22 04:09:47

@loyal 木有崇洋媚外的意思,只是jstree用了很久,提出的这个问题解决起来就没有上述大侠们所建议的复杂,所以就这个问题来说的是“更好用”。

柳若烟 2021-11-22 04:08:33

回复
那是他没有看文档.就算换jstree不看文档也照样 会写成照样的.

心欲静而疯不止 2021-11-22 04:07:22

jstree更好用

飘然心甜 2021-11-22 03:52:43

jstree更好用

飘然心甜 2021-11-22 03:46:28

isParent:true。。。

回眸一笑 2021-11-22 03:36:45

额,这有么联系?

可是我不能没有你 2021-11-22 03:08:03

楼主,我是宜昌的!

不再见 2021-11-22 03:04:42
/**
 * 处理channels列表方法,channel列表数据被放在report的channelTree属性中
 * 
 * @param report
 * @param adminId
 * @param tree
 */
protected void handleChannles(ServiceReport report, int adminId, ChannelTree tree) {
	List<Map<String, Object>> list = new LinkedList<Map<String, Object>>();
	boolean isPower = tree.testAdminPower(adminId, 0);
	for (ChannelTreeNode root : tree.getRootNodes()) {
		Map<String, Object> child = handleChannles(adminId, root, 1, isPower);

		if (child != null) {
			list.add(child);
		}
	}

	report.setProperty("channelTree", list);
}

/**
 * 没有权限时的字体
 */
private static final Map<String, Object> fontWithoutPower;
static {
	Map<String, Object> temp = new HashMap<String, Object>();
	temp.put("color", "#ff0000");
	fontWithoutPower = Collections.unmodifiableMap(temp);
}

/**
 * 处理channels列表方法,返回以指定node为根的子树的频道树的结构
 * 
 * @param tree
 * @param adminId
 * @param root
 * @param deep
 * @param isPower
 *            如果父节点已经有权限了,就不需要再重复检查本节点的权限
 * @return
 */
private Map<String, Object> handleChannles(int adminId, ChannelTreeNode root, int deep, boolean isPower) {
	Map<String, Object> data = new HashMap<String, Object>();
	data.put("name", root.getChannelName());
	data.put("channelId", root.getChannelId());
	if (isPower == false) {
		isPower = root.testAdminPower(adminId);
	}

	if (isPower) {
		data.put("click", "goChannel(" + root.getChannelId() + ")");
	} else {
		data.put("click", "clickWithoutPower('" + root.getChannelName() + "')");
		data.put("font", fontWithoutPower);
	}

	List<Map<String, Object>> children = new LinkedList<Map<String, Object>>();
	// 深度大于限制深度就不再操作
	if (deep < Const.MAX_TREE_DEEP) {
		for (ChannelTreeNode node : root.getChildren()) {
			Map<String, Object> child = handleChannles(adminId, node, deep + 1, isPower);

			if (child != null) {
				children.add(child);
			}
		}
	}

	// 本身没权限,下属的子节点也没权限时,这个节点不显示
	if ((isPower == false) && (children.size() == 0)) {
		data = null;
	} else {
		if (children.size() != 0) {
			data.put("children", children);
		}
	}

	return data;
}

如上面的handleChannles方法产生的那个list,然后最后可以直接把这个list交给json库比如fastjson等让他们直接转成json字符串返回。

醉酒的小男人 2021-11-21 23:10:19

,{id:"${y.id}", pId:"${y.pcode}", name:"${y.caption}", open:false,isParent:true} 设置了isParent:true啊,如果取消addDiyDom的话,就全部没有加号和图标了

如日中天 2021-11-21 23:08:27

回复
如果要这样模板生成的话,你只能写if语句控制是否要输出isParent:true了,个人看法是返回json数据的话,最好不采用模板,而是后台代码构造Map填充好之后,用json库直接生成String这样可以得到最大的灵活性

水水月牙 2021-11-21 22:55:29

额,本人比较愚钝,接触这个没多久,所以不是很懂你的意思。就是说不在JS里面写isParent为true,用后台取到传回页面的josn吗?

平生欢 2021-11-21 13:05:59

回复
只是个人理解了,用jsp或者其他模板的意义只是想把数据本身和无关的呈现样式分离开,把数据插入到样式中。而json本身就单纯是数据,最适合的方式还是用原始的Servlet的IO流的方式直接返回。== 我贴下我demo的代码

把回忆走一遍 2021-11-21 11:47:01

关键是你数据是怎样的,如果节点数据没有children也没有设置isParent为true的话,是不会显示成这种文件夹的形式的。做的时候建议先多看下官方提供的demo的代码

岁吢 2021-11-20 18:35:46

两个办法,一个是后台的数据库里面增加一个字段isParent,标记是否还有子节点,还有一个是查询数据的时候顺便查下是否还有子节点,总之,返回来的json数据多一个isParent这样的标记就可以了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文