jQuery zTree 异步加载添加子节点重复问题_jquery_脚本之家

2019-12-22 19:51栏目:龙竞技官网
TAG:

图片 1

zTree 简介

最近在做一个自己的小软件,希望实现功能如下:该图只是略微表达我的想法,具体问题如下:①类Node和edge都是我继承了QObject,是否还需要做其他特殊处理?②代码示例如下,我应该如何写bindnode函数实现我希望的功能?

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

classNode:publicQObject{public:explicitNode(QObject*parent=nullptr);~Node();//将改类的变量与QTree中节点绑定//此操作后,运行过程中CPP中的值发生变化时,Qtree中的值也同步变化voidbindnode(QTreeWidgetItem*item);voidsetnodevalue(QTreeWidgetItem*item,QStringdata);QVariantgetnodevalue(QTreeWidgetItem*item);//获取该类的类名QStringgetclassname(){return"Node";}public:QTreeWidgetItem*posx;QTreeWidgetItem*posy;};

zTree 是开源免费的软件。如果您对 zTree 感兴趣或者愿意资助 zTree 继续发展下去,可以进行捐助。

我参考了论坛中很多帖子,有个别的说要采用属性表QtTreePropertyBrowser,有的说应该采用委托QtDelgate,但是我尝试了都不能满足我的想法一样。新手学习中,敬请高手指点。PS:这个想法也是出自我目前在用的另一款软件,基于C++和MFC的MVC架构开发的,model和代码如下,供参考上图的tree中,variable节点下的所有节点都在代码中绑定,头文件如下:

zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器 支持 JSON 数据 支持静态 和 Ajax 异步加载节点数据 支持任意更换皮肤 / 自定义图标 支持极其灵活的 checkbox 或 radio 选择功能 提供多种事件响应回调 灵活的编辑功能,可随意拖拽节点,还可以多节点拖拽哟 在一个页面内可同时生成多个 Tree 实例 简单的参数配置实现 灵活多变的功能

classNetworkNode{public://c++memberfunctionsFS_CONTENT_DLL_FUNCNetworkNode();FS_CONTENT_DLL_FUNCdoubleonCreate(doubledropx,doubledropy,doubledropz,intiscopyDEFAULTZERO);FS_CONTENT_DLL_FUNCdoubleonTimerEvent(treenodeinvolved,intcode,char*datastr);FS_CONTENT_DLL_FUNCvirtualvoidbindVariablesDefault();TreeNode*node_v_network;#definev_networknode_v_network-safedatafloat()[0]TreeNode*node_v_travellers;#definev_travellersnode_v_travellers-safedatafloat()[0]TreeNode*node_v_activetravellers;#definev_activetravellersnode_v_activetravellers-safedatafloat()[0]TreeNode*node_v_stations;#definev_stationsnode_v_stations-safedatafloat()[0]TreeNode*node_v_showmode;#definev_showmodenode_v_showmode-safedatafloat()[0]TreeNode*node_v_maxinactive;#definev_maxinactivenode_v_maxinactive-safedatafloat()[0]TreeNode*node_v_lastxloc;#definev_lastxlocnode_v_lastxloc-safedatafloat()[0]TreeNode*node_v_lastyloc;#definev_lastylocnode_v_lastyloc-safedatafloat()[0]TreeNode*node_v_lastzloc;#definev_lastzlocnode_v_lastzloc-safedatafloat()[0]TreeNode*node_v_showme;#definev_showmenode_v_showme-safedatafloat()[0]TreeNode*node_v_lastupdatetime;#definev_lastupdatetimenode_v_lastupdatetime-safedatafloat()[0]TreeNode*node_v_clicked;#definev_clickednode_v_clicked-safedatafloat()[0]TreeNode*node_v_sideoffset;#definev_sideoffsetnode_v_sideoffset-safedatafloat()[0]TreeNode*node_v_disttosideoffset;#definev_disttosideoffsetnode_v_disttosideoffset-safedatafloat()[0]TreeNode*node_v_trafficcontrollers;#definev_trafficcontrollersnode_v_trafficcontrollers-safedatafloat()[0]TreeNode*node_v_virtualexits;#definev_virtualexitsnode_v_virtualexits-safedatafloat()[0]TreeNode*node_v_notifyofblockedlength;#definev_notifyofblockedlengthnode_v_notifyofblockedlength-safedatafloat()[0]

原始问题

代码中还定义了节点值得引用,例如:#definev_notifyofblockedlengthnode_v_notifyofblockedlength-safedatafloat()[0];这样在cpp中就直接可以如下方式用intx=v_notifyofblockedlength;//获取值v_notifyofblockedlength=5;//赋值我也希望能够得到如此的结果,不知道是否在QT中可以实现。求指教。

//添加结点, 产品和版本function addNode { rMenu.css({ "visibility": "hidden" }); var treeNode = zTree.getSelectedNodes()[0]; var pid; var nodeName; var treelevel; if (!treeNode && event.target.tagName.toLowerCase() != "button" && $.parents { //添加产品结点pid = 0; treeNode = null; treelevel = 1; } else if  { //添加版本结点pid = treeNode.id; treelevel = 2; } $.post( "AddNode.action", { type: treelevel, id: pid }, function { var params = //.exec; if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $.parents || treeNode.open)) { zTree.expandNode; } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); });}

原本直接添加子节点的时候,如果父节点没有展开,会添加两个一样的子节点;后来我对父节点是否展开进行了判断,但是却变成了如果父节点展开,会添加两个一样的子节点,这个问题要怎么解决呢?

办法一

if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $.parents || treeNode.open)) { zTree.expandNode; } treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });

if(!treeNode && event.target.tagName.toLowerCase() != "button" && $.parents { treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); } else if { if { zTree.reAsyncChildNodes; } else { treeNode.isParent=true; zTree.reAsyncChildNodes; } } else { zTree.expandNode; treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel }); }

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:jQuery zTree 异步加载添加子节点重复问题_jquery_脚本之家