您的位置:首页 > Web前端 > JavaScript

extjs 树总结(logic层)

2011-02-22 17:00 148 查看
分两种情况写:

1.每次都去数据库查询:

首先要取得树的根节点、每次走后台的时候根据选中的nodeId去查询它的子节点

在ExplorerTreeNodeDto中定义了一个List < ExplorerTreeNodeDto > children的属性用来定义子节点

public List < ExplorerTreeNodeDto > loadTree(id) {

// 判断取得根节点还是叶子节点

if (folderId.substring(0, 4).equals(ConstantsManager.PREFIX_FOLDER_ID)) {
// 取得叶子节点的情况

return getTreeNode(id);
} else {
// 取得跟节点的情况
return getRootNode();
}
}

private List < ExplorerTreeNodeDto > getRootNode(final String fccid) {
FolderDao folderDao = getFolderDao();

// 取得根节点数据

List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccid);
for (int i = 0; i < lst.size(); i++) {
ExplorerTreeNodeDto dto = lst.get(i);
// 业务中要求初始化的时候显示根节点及其下一层节点

dto.setChildren(folderDao.getTreeNode(dto.getId()));
// 因为DTO中定义的leaf类型是String的,在这里给转化成布尔型的,这样在extjs的树标签中就能自动判断是不是叶子节点

for (int j = 0; j < lst.get(i).getChildren().size(); j++) {
if ("TRUE".equals(dto.getChildren().get(j).getStrLeaf())) {
dto.getChildren().get(j).setLeaf(true);
} else {
dto.getChildren().get(j).setLeaf(false);
}
}

}

return dto;
}

private List < ExplorerTreeNodeDto > getTreeNode(final String folderId) {
FolderDao folderDao = getFolderDao();
List < ExplorerTreeNodeDto > lstDto;
// 取得树的叶子节点

lstDto = folderDao.getTreeNode(folderId);
// 转换leaf类型

for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}
}
return lstDto;
}

2.只读取一次数据库,取得所有的数据,不再访问数据库

public List < ExplorerTreeNodeDto > loadTreeAll(final String fccId,
final String serviceId, final String subId, final String linkId) {
FolderDao folderDao = getFolderDao();
// 取得根节点数据

List < ExplorerTreeNodeDto > lst = folderDao.getRootNode(fccId);
// 递归读取根节点的子节点

return getTreeNodeRecursive(lst);
}

private List < ExplorerTreeNodeDto > getTreeNodeRecursive(
List < ExplorerTreeNodeDto > lstDto) {
FolderDao folderDao = getFolderDao();

for (int i = 0; i < lstDto.size(); i++) {
ExplorerTreeNodeDto dto = lstDto.get(i);
dto.setChildren(folderDao.getTreeNode(dto.getId()));
if ("TRUE".equals(dto.getStrLeaf())) {
dto.setLeaf(true);
} else {
dto.setLeaf(false);
}

// 递归取得子节点
if (dto.getChildren() != null) {
getTreeNodeRecursive(dto.getChildren());
}
}
return lstDto;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: