2019/11/26 学习笔记

2019/11/26 学习笔记

树的学习

  • 首先需要建立一个类实现TreeContentProvider接口,并实现getElements方法
  • 然后在表单新建树形数据源,选择custom,再选刚刚新建的类
  • 最简单的树:通过TreeNode定义节点数组,再对相应节点进行赋值,最少需要两个参数,节点id,节点值
 TreeNode[] tn = new TreeNode[3];
        tn[0] = new DefaultTreeNode("0","aa");
        tn[1] = new DefaultTreeNode("1","bb");
        tn[2] = new DefaultTreeNode("2","cc");        
        return tn;

效果:
在这里插入图片描述

  • 分层的树和具有远程搜索的树(具有远程搜索需现在界面打开远程搜索)
    解释一下:首先在第一次搜索时返回了三个节点:aa,bb,cc
    然后设置了aa的Parent为true,表面它是个父节点具有子节点,
    然后前端如果点击父节点,就会再次调这个函数,通过id,
    然后发现id=0的话就会返回tn2的两个节点:aa1,aa2
    最后如果通过搜索框搜索666的话,会返回tn3的treeRemoteSearch
 Object id = context.getConditions().get("id");
	     Object treeRemoteSearch = context.getConditions().get("treeRemoteSearch");    

	     //远程搜索时的数据模拟
	     TreeNode[] tn3 = new TreeNode[1];
	     tn3[0] = new DefaultTreeNode("666","treeRemoteSearch");
	     if("666".equals(treeRemoteSearch)) return tn3;        

	     //第二次查询时的数据模拟。        
	     TreeNode[] tn2 = new TreeNode[2];
	     tn2[0] = new DefaultTreeNode("01","aa1");
	     tn2[1] = new DefaultTreeNode("02","aa2");
	     if("0".equals(id)) return tn2;

	     //第一次查询时的数据模拟。
	     TreeNode[] tn = new TreeNode[3];
	     DefaultTreeNode dtn1 = new DefaultTreeNode("0","<font color='red'>aa</font>");
	     dtn1.setParent(true);

	     tn[0] = dtn1;
	     tn[1] = new DefaultTreeNode("1","bb");
	     tn[2] = new DefaultTreeNode("2","cc");        
	     return tn;

效果:
在这里插入图片描述
在这里插入图片描述

  • 第三种:通过list返回某个节点的子节点
 TreeNode[] tn = new TreeNode[3];
	        List<DefaultTreeNode> children = new ArrayList<DefaultTreeNode>();
	        children.add(new DefaultTreeNode("01","aa1"));
	        DefaultTreeNode dtn1 = new DefaultTreeNode("0","aa");
	        dtn1.setChildren(children);
	        tn[0] = dtn1;
	        tn[1] = new DefaultTreeNode("1","bb");
	        tn[2] = new DefaultTreeNode("2","cc");        
	        return tn;

其中树的前端方法,靠自己实践了。

  • 第四种:DynamicTreeNode(Hash Map的实现类)
    public DynamicTreeNode(String pid, String id, String name,boolean isParent)
    pid父层标识或者说父级的id,id本层标识
    除了必须要的几个属性外,可以添加自定义属性。
TreeNode[] tn = new TreeNode[2];        
        //public DynamicTreeNode(String pid,String id,String name,boolean isParent)
        DynamicTreeNode dtn1 = new DynamicTreeNode("0","1","aa",true);
        //DynamicTreeNode和DefaultTreeNode不同,可以添加自定义属性
        dtn1.put("age", "20");        
        DynamicTreeNode dtn2 = new DynamicTreeNode("1","2","aa1",false);
        dtn2.put("age", "21");        
        tn[0] = dtn1;
        tn[1] = dtn2;        
        return tn;  
  • 第五种: getTreeNode,通过对象获取动态树节点对象。注意:对象中的class属性会被忽略;pid,id,name,isParent属性会pid,id,name,isParent参数覆盖。
    public static DynamicTreeNode getTreeNode(String pid, String id,String name, Boolean isParent,Object obj)
    可以自己定义实体,在我感觉,实体类并不一定需要pid,id,name,isParent属性。
 TreeNode[] tn = new TreeNode[2];
	        //getTreeNode(pid, id, name, isParent, obj)
	        //TestObject包含int id,int pid,String name三个属性,同时有相应的Getter/Setter方法,即是一个entity,
	        //下同。
	        TestObject s1 = new TestObject();
	        //通过对象获取动态树节点对象。
	        DynamicTreeNode dtn1 = TreeNodeFactory.getTreeNode("0", "1", "aa", true, s1);
	        TestObject s2 = new TestObject();
	        DynamicTreeNode dtn2 = TreeNodeFactory.getTreeNode("1", "2", "aa1", false, s2);
	        tn[0] = dtn1;
	        tn[1] = dtn2;
	        return tn;   

我的实体是没有pid,id,name,isParent属性的
效果:
在这里插入图片描述
第六种:getTreeNodes,可以将集合批量转换为树节点集合。所有节点都默认为父节点。如果需要单独空值节点,请使用 #DynamicTreeNode() 方法。public static List getTreeNodes(List<?> list, String pidFieldName, String idFieldName,String nameFieldName)
我的理解:可以将一个集合的对象批量转换成树节点集合,但是集合里的对象需要有相应的pid,id,name属性,方法的后面三个参数就是设置相对应的属性。

 TreeNode[] tn = null;
	        if(context.getPid() != null){            
	        }else{
	            List<TestObject> list = new ArrayList<TestObject>();
	            TestObject s1 = new TestObject();
	            s1.setId(1);
	            s1.setPid(0);
	            s1.setName("aa");
	            list.add(s1);
	            TestObject s2 = new TestObject();
	            s2.setId(2);
	            s2.setPid(1);
	            s2.setName("aa1");
	            list.add(s2);
	            tn = new TreeNode[list.size()];
	            // getTreeNodes(public static List<TreeNode> getTreeNodes(List<?>
	            // list,String pidFieldName,String idFieldName,String
	            // nameFieldName);
	            //可以将集合批量转换为树节点集合。
	            List<TreeNode> nodes = TreeNodeFactory.getTreeNodes(list, "pid","id", "name");
	            tn = nodes.toArray(tn);
	        }
	            return tn;

效果:
在这里插入图片描述

最后写一下我的一些心得:
树的初始化参数:{“dimensionId”:params.dimID}
这样就可以从后台那边取出来
前端可以在页面加载前定义这个:params.dimID
然后需要更改这个的dimID的时候用树的刷新方法:(后面几个参数自己了解下)
view.tree.refresh2({dimensionId:$params.dimID},true,true,true,null)

另外 最重要的一点:实体ID一定要String型!!!

一个方法发送了请求,和异步加载正常结束正确流程
方法开始——>发送请求——>方法其他语句——>方法结束——>异步加载的结果和方法运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值