我正在使用細胞樹,我有這個問題:
我通過RPC調用獲取數據。我決定一個節點是否是一片葉子 - 基於我爲孩子們獲得的數據。例如 - 如果一個節點有一個叫做「foo」的兒子 - 那麼這個節點應該是一個葉子。
我不知道如何讓這個節點成爲一片葉子,而不是在樹上展示它的子節點。 (相反,我想在點擊節點時將它們展示給其他地方)
可能嗎?有人有想法嗎?
請幫助我,我堅持了2天...
謝謝!GWT細胞樹 - 葉節點
0
A
回答
0
您可以重寫isLeaf()方法來返回true或false。
但是,從UI的角度來看,會有一個問題。在用戶點擊一個節點之前,你不知道這應該是一個節點還是一個葉子。這有點令人困惑,雖然我多次看到這樣的實現。如果你的樹不是很大,可以考慮一次加載所有數據,然後按照你想要的方式構建它 - 根據需要創建節點或葉子。
0
如果每個節點都有一個類型,您可以創建一些在您的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;
}
}
}
+0
那麼,我的問題是,我不知道如果一個特定的節點將成爲父母或不是。我可以在同一級別擁有2個相同類型的節點,點擊它們後 - 兩個節點都有子級列表,但其中一個列表將包含單詞「foo」(例如),因此我希望它的父母是葉子,當點擊這個葉節點時 - 看到屏幕上其他地方的孩子列表。但我現在明白這是不可能的,因爲當點擊這兩個節點的父節點時,它應該已經清楚它們是否是樹葉(對於打開的圖標)。 – user1579191
相關問題
- 1. GWT - 在細胞樹中添加和移除節點
- 2. 如何重新呈現gwt細胞樹中的特定節點
- 3. GWT細胞樹,如何使用?
- 4. 更新渲染樹細胞
- 5. GWT動作細胞圓角?
- 6. GWT CellList編輯細胞
- 7. 樹類的實現與節點和葉
- 8. L葉節點的二叉樹高度
- 9. B +樹的葉節點大小
- 10. B +樹中的非葉節點
- 11. 在二叉樹的葉節點的
- 12. 訪問樹中的節點/葉子
- 13. 計算樹中的葉節點
- 14. 在樹結構中,如何命名樹,節點,樹葉?
- 15. 計算二叉樹中的節點數和葉節點數
- 16. 二叉樹中距給定節點最近的葉節點
- 17. 將節點放在父節點的邊界上細胞景觀
- 18. 如何更改細胞節點節點的標籤
- 19. 亮點Gridpane細胞
- 20. 重新排列GWT中的樹節點
- 21. 在gwt中識別樹的節點
- 22. 樹中的GWT搜索節點
- 23. GWT:添加函數clickhandler到ImageResource細胞
- 24. 保存AVL樹中節點下的樹葉數量
- 25. 在樹葉中放置一個節點4棵樹拖放
- 26. 顯示一排細胞的細節
- 27. Java樹節點詳細信息
- 28. 展開對GWT細胞表需求行
- 29. GWT CellTable#setColumnWidth()不在於在細胞
- 30. GWT樹的工具提示:將節點添加到節點
我得到了孩子們的節點USI ng AsyncDataProvider。在getNodeInfo()中我創建了一個新的數據提供者實例。在數據提供者的onRangeChanged()中,我調用回調方法,並在其onSuccess方法中更新數據。我可以檢查onSuccess的結果 - 如果它有「foo」,然後返回Null,意味着這個節點沒有子節點,但是當點擊節點時它會拋出一個Null異常。現在,如果我不返回空 - 那麼它會顯示孩子。而且我無法找到一種方法來檢查CustomTreeModel中的孩子! – user1579191
我按照這些詳細信息更改了我的答案。 –
我的樹很大,所以我無法一次加載所有的數據。我沒有看到我在這裏如何使用isLeaf方法。我該如何檢查這個方法的dataProvider列表?對列表值的唯一訪問來自我在創建單元時實現的render()方法,但我不明白它如何幫助我。謝謝你的幫助! – user1579191