내가 셀 트리를 사용하고 있는데 나는이 문제를 가지고 :
나는 RPC 호출을 통해 데이터를 얻을. 노드가 리프인지 아닌지를 결정합니다. 그 노드에 대한 데이터를 기반으로합니다. 예를 들어 - 노드에 "foo"라는 아들이 있으면이 노드는 잎이어야합니다.
이 노드를 리프가되게하고 트리에 자식을 표시하지 않는 방법을 모르겠습니다. (대신 노드를 클릭 할 때 다른 곳에 보여주고 싶습니다.)
가능합니까? 누구나 아이디어가 있습니까?
내가 ...
감사 2 일간 그것으로 붙어있어, 제발 도와주세요!GWT 셀 나무 - 잎 노드
답변
당신은 true 또는 false를 돌려 isLeaf() 메소드를 오버라이드 (override) 할 수 있습니다.
은 UI 관점에서, 그러나, 문제가있을 수 있습니다. 사용자가 노드를 클릭하기 전에 노드 또는 리프인지 여부를 알 수 없습니다. 이것은 다소 혼란 스럽지만, 그러한 구현을 두 번 이상 보았습니다. 트리가 너무 크지 않은 경우 모든 데이터를 한 번에로드 한 다음 필요한 방식으로 노드를 작성하거나 필요에 따라 리프를 작성하십시오.
각 노드 유형이있는 경우, 당신은 당신의 TreeViewModel의 IMPL에서 아이를 가질 것으로 예상되지 않는 유형의 일부 목록이나지도를 만들 수 있을까?
나는 모든 종류의 메타 모델을 사용 않았던 IMPL에서있지만 요구 사항이 아닙니다.
예를 들면,
@Override
public boolean isLeaf(Object value) {
boolean result = true;
if (value == null) {
result = false; // assumes all root nodes have children
} else if (value instanceof NavNode) {
final NavNode currentNode = (NavNode) value;
final NodeType currentNodeType = NodeType.fromValue(currentNode.getType());
if (currentNode.hasChildren() || NodeHelper.couldHaveChildren(currentNodeType)) {
result = false;
}
}
return result;
은}
// Create a data provider for root nodes
protected ListDataProvider<NavNode> getDataProvider(Collection<NavNode> rootNodes) {
return new ListDataProvider<NavNode>(new LinkedList<NavNode>(rootNodes));
}
// Create a data provider that contains the immediate descendants.
protected AsyncDataProvider<NavNode> getDataProvider(final NavNode node) {
return new AsyncDataProvider<NavNode>() {
@Override
protected void onRangeChanged(final HasData<NavNode> display) {
final Set<NavNode> clientNodes = util.getAncestorNodes(node);
clientNodes.add(node);
final NavigationInfo clientInfo = new NavigationInfo(clientNodes);
navigationService.getNavInfo(clientInfo, node, resources, qualifications, new SafeOperationCallback<NavigationInfo>(eventBus, false) {
@Override
public void onFailureImpl(Throwable caught) {
GWT.log("Something went wrong retreiving children for " + node.getName(), caught);
updateRowCount(0, false);
}
@Override
public void onSuccessImpl(OperationResult<NavigationInfo> or) {
util.mergeNavInfo(or.getResult());
final NavNode nodeFromServer = util.getNode(node.getId());
final Range range = display.getVisibleRange();
final int start = range.getStart();
final Set<NavNode> nodes = util.getNodes(nodeFromServer.getChildren());
updateRowData(display, start, new LinkedList<NavNode>(nodes));
}
});
}
};
}
private static class NodeHelper {
private static final Set<NodeType> PARENTAL_NODE_TYPES;
static {
PARENTAL_NODE_TYPES = new HashSet<NodeType>();
PARENTAL_NODE_TYPES.add(NodeType.ASSET_OWNER);
PARENTAL_NODE_TYPES.add(NodeType.OPERATING_DAY);
PARENTAL_NODE_TYPES.add(NodeType.RESOURCES);
PARENTAL_NODE_TYPES.add(NodeType.RESOURCE);
PARENTAL_NODE_TYPES.add(NodeType.ENERGY);
PARENTAL_NODE_TYPES.add(NodeType.RESERVE);
PARENTAL_NODE_TYPES.add(NodeType.DAY_AHEAD_CLEARED_OFFERS);
PARENTAL_NODE_TYPES.add(NodeType.DRR_LOAD_FORCAST);
PARENTAL_NODE_TYPES.add(NodeType.RESERVE_DISPATCH);
PARENTAL_NODE_TYPES.add(NodeType.RESERVE_RAMP_RATE);
}
public static boolean couldHaveChildren(NodeType nodeType) {
boolean result = false;
if (PARENTAL_NODE_TYPES.contains(nodeType)) {
result = true;
}
return result;
}
}
}
글쎄, 내 문제는 특정 노드가 부모가 될 것인지 아닌지 미리 알 수 없다는 것입니다. 동일한 유형의 두 노드를 같은 레벨에서 가질 수 있습니다. 노드를 클릭하면 둘 다 자식 목록을 갖지만 목록 중 하나에는 "foo"라는 단어가 포함되므로 (예 :) 부모가 잎이 될 때, 그리고이 잎 노드를 클릭 할 때 화면의 어딘가에있는 자식 목록을 볼 수 있습니다. 그러나 이것이 가능하지 않다는 것을 알았습니다. 두 노드의 부모를 클릭 할 때 - 나뭇잎인지 아닌지 (열려있는 아이콘의 경우) 이미 명확해야합니다. – user1579191
- 1. 가장자리 목록에서 나무 만들기 : 누락 된 잎 노드
- 2. GWT 세포 나무, 사용법?
- 3. 표시 노드 나무
- 4. gwt cellbrowser [노드 선택] vs [노드 열기]
- 5. GWT 셀 브라우저 실시간 업데이트 문제
- 6. GWT : 셀 트리 및 초기 키보드 선택된 노드
- 7. 병합 나무
- 8. GWT CellTable의 셀 색상
- 9. GWT 셀 테이블 오류
- 10. GWT 셀 테이블 문제
- 11. GWT 셀 콜백
- 12. GWT 셀 테이블 재설정
- 13. GWT draggable CellTable 셀
- 14. 셀 위로 툴팁. GWT
- 15. Gwt VerticalPanel 셀 높이
- 16. GWT 셀 선택
- 17. 빨간 검은 나무 질문
- 18. GWT 흐름 표 채우기 셀
- 19. GWT 셀 테이블의 인라인 편집
- 20. GWT 셀 배경색을 설정하는 방법
- 21. GWT CellTable의 하이퍼 링크 셀
- 22. 지도에 데이터가있는 GWT 셀 테이블
- 23. GWT DockLayoutPanel 셀 간 간격
- 24. GWT CellTree 상위 노드 선택
- 25. ExtJS4 나무 패널 문제
- 26. 균등 분할 나무
- 27. XElement : 모든 잎 컬렉션?
- 28. 이진 트리에서 잎 삭제
- 29. 바딘 나무. 게으른 로딩
- 30. 루비 - n 차 나무
나는 노드 USI의 아이를 얻을 AsyncDataProvider. getNodeInfo()에서 데이터 공급자의 새 인스턴스를 만들고 있습니다. 데이터 공급자의 onRangeChanged()에서 콜백 메서드를 호출하고 onSuccess 메서드에서 데이터를 업데이트합니다. onSuccess의 결과를 검사 할 수 있습니다. "foo"가 있고 Null을 반환하면이 노드에 자식이 없지만 노드를 클릭하면 Null 예외가 발생합니다. 이제 Null을 돌려주지 않으면 아이들을 보여줍니다. 그리고 CustomTreeModel에서 자녀를 확인하는 방법을 찾을 수 없습니다! – user1579191
나는이 세부 사항을 따르는 나의 응답을 바꾸었다. –
내 트리가 너무 커서 한 번에 모든 데이터를로드 할 수 없습니다. 여기서 isLeaf 메서드를 어떻게 사용할 수 있는지 알지 못합니다. 이 메소드에서 dataProvider의 목록을 어떻게 확인할 수 있습니까? 목록의 값에 대한 유일한 액세스는 셀을 만들 때 구현 한 render() 메서드에서 가져온 것이지만 어떻게 도움이되는지는 알 수 없습니다. 당신의 도움을 주셔서 감사합니다! – user1579191