잠시 후 나는 마침내 그것을 얻었다. 나는 다음 레벨을위한 모든 TreeNodes의 이름을 나타내는 일련의 문자열을 제공하는 자체 RPC를 작성했다.
그래서 엔트리 포인트가 될 것이다 :
private NodeServiceAsync nodesRpc; //The RPC that grabs more nodes
private Tree data; //The data structure to hold all of the nodes
private ColumnTree list; //The GUI element that is shown on in the browser
public void onModuleLoad() {
nodesRpc = (NodeServiceAsync) GWT.create(NodeService.class);
data = new Tree();
list = new ColumnTree;
list.setAutoFetchData(true);
list.setLoadDataOnDemand(true);
list.addNodeSelectedHandler(new NodeSelectedHandler() {
public void onNodeSelected(NodeSelectedEvent event) {
if(/*Node is folder and hasn't been opened before*/) {
//Get More Nodes
AsyncCallback<String[]> callback = new NodeGetter<String[]>();
nodesRpc.getData(event.getNode(), callback);
}
else if(/*Node is not a folder (at the end) */) {
//Do something else
}
}
});
list.setData(data); //Make the GUI Element Represent The Data Structure
RootPanel.get().add(list); //Add to screen
}
서버 측에서 serverlet는 문자열 배열로 결과 집합을 해석, 실행 한 질의를 생성하고 다시 전달한다. 모든 콜백은 클라이언트 측에서 다시 그 배열을 TreeNode 배열로 변환하고 클릭 한 원래 노드에 연결해야합니다. 마지막으로 GUI 요소가 새 노드로 다시 그려집니다.
때로는 수백 개의 노드가 쿼리 된 곳에서 표시되는 경우에도 노드로드 사이에 다운 시간이 거의 없음에도 놀랐습니다 (1 초 미만).