dorado7-dataTree-递归树与主从关系的二层树

来源:互联网 发布:在淘宝开店要交保证金吗 编辑:程序博客网 时间:2024/05/13 01:19
1.递归树的使用
a.先看一下实体类的定义
@Entity
@Table(name = "EXAMPLE_CATEGORIES")
public class ExampleCategory implements Serializable {
private static final long serialVersionUID = -3446596720169668211L;
private long id;//主键
private Long categoryId;//上级Id
private String label;//名称
private Collection<ExampleCategory> categories;//集合属性


@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "CATEGORY_ID", insertable = false, updatable = false)
@OrderBy(value = "sortFlag")
public Collection<ExampleCategory> getCategories() {
return categories;
}


后台定义两个方法
@DataProvider
public Collection<ExampleCategory> getCategories(){
return exampleCategoryDao.find("from ExampleCategory where categoryId is null");
}

@DataProvider
public Collection<ExampleCategory> getChildCategories(Long parentCategoryId){
return exampleCategoryDao.find("from ExampleCategory where categoryId="+parentCategoryId);
}


那么在定义dataType的时候,要注意递归动作是通过categories属性来完成的,为了防止大数据的产生压力,采用懒加载技术。
在dataType中建立一个reference属性,其datatype为[SELF]表明采用自己的类型,dataprivader:XXX#getChildCategories
getChildCategories方法中需要传递一个参数Long parentCategoryId,那么将parameter属性设置为:$${this.id},也就是将
当前的数结点的ID传到后台,我们在点击的时候就会来加载方法从而得到数据。


dataset的设定,这块只需要将其绑定DataType,dataPrivader: xxx#getCategories()也就是做递归首先看到的是那些categoryId
为null的列表;当然parameter属性的设置可以为$${null},修改dataPrivader为getChildCategories也可以实现。


dataTree绑定的是dataSet , 注意BindingConfigs下的BindingConfig的设置,注意childrenProperty的设置categories(子节点的数据)。
labelProperty:label(要展现的内容)。recursive:是否支持递归处理。


2.普通主从表的结构树(两层)
dataTree BindingConfigs->BindingConfig(这个是第一层)->BindingConfig(第二层)在第二层中间要注意的是childrenProperty 属性
childrenProperty 属性代表的是当前结点的子属性,并非在上一层的结点中间设置。


在dataTree 的事件中要注意 onRenderNode 事件。


onRenderNode ( Object self , Object arg ) : booleanfrom AbstractTree:当树状列表渲染树节点时触发的事件。
Parameters:
self : Object 事件的发起者,即组件本身。
arg : Object 事件参数。
.dom : HTMLElement树节点对应的DOM对象。
.label : String节点标题文本。
.node : dorado.widget.tree.Node渲染的节点。
.processDefault : boolean [writeable]是否在事件结束后继续使用系统默认的渲染逻辑。
Returns:boolean
是否要继续后续事件的触发操作,不提供返回值时系统将按照返回值为true进行处理。
var node = arg.node, data = node.get("data");//获取可任意设定的与该节点关联在一起的数据。
if (node.get("bindingConfig.name") == "name") {
var name=data.get("lastName")+data.get("firstName");//姓和名相匹配。
      node.set("label",name);
arg.processDefault = true;
}else{
arg.processDefault = true;
}
0 0