2013-05-15 2 views
4

Windows 탐색기와 같은 디렉터리 구조를 구현하고 있습니다. 나는 DOM 해당 다시 렌더링하는 ... 등gwt 셀 트리에서 특정 노드를 다시 렌더링하는 방법

private ListDataProvider<Object> dataProvider= new ListDataProvider<Object>(); 

private Object current;//store object of currentNode; 

private Map<Object, ListDataProvider<Object>> keyprovider = 
    new HashMap<Object,ListDataProvider<Object>>(); 

private CellTree tree; 

// keeps a map for storing dataproviders in each hierarchy , 

public void setListToCurrentNode(List<Object> newList){ 

    //adding this newlist to current data provider not reflecting to display 
    keyprovider.get(currentObject).setList(newList); 

} 

public void onModuleLoad(){ 

    treeSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 

     public void onSelectionChange(SelectionChangeEvent event) { 

      //setting current object as selected node 
      current = treeSelectionModel.getSelectedObject(); 

     } 
    }); 

} 
+0

코드가 추가 아래와 같습니다 ..... –

답변

0

는 구현

private final class DataProvider extends AsyncDataProvider<Object> { 

    private Object value; 
      private List Objs; 

    DataProvider(Object value) { 
     this.value = value; 
    } 


    public void update(List objs) {//Call update when you wanted to refresh tree 
        this.objs=objs; 
     for (HasData<Object> disp : getDataDisplays()) { 
      this.onRangeChanged(disp); 
      break; 
     } 
    } 

    @Override 
    protected void onRangeChanged(final HasData<Object> display) { 

            updateRowData(0, objs); 
       updateRowCount(objs.size(), true); 

      } 
1

데이터 공급자의 힘을 폴더를 제거, 폴더를 추가 등의 수행 폴더 작업 후 트리의 특정 노드를 다시 렌더링 할. 아래의 코드는 작동 방식을 보여줍니다. 이 예제는 선택된 루트 노드에서 Enter 키를 눌러 리프 노드를 새로 고칠 수있는 2 레벨 트리를 생성합니다.

나는 가능한 한 간단하게 코드를 유지하려고 노력했다. 필요한 모든 것들이 여기에 포함되어있다. AsyncDataProvider에 Listdataprovider 변경이 해결

public class TestEntryPoint implements EntryPoint { 

    private static final Logger LOG = Logger.getLogger(TestEntryPoint.class.getName()); 

    class Item { 

     String name; 
     boolean leaf; 

     public Item(String name, boolean leaf) { 
      this.name = name; 
      this.leaf = leaf; 
     } 

     @Override 
     public String toString() { 
      return "Item {name=" + name + ", leaf=" + leaf + "}"; 
     } 
    } 

    class ItemCell extends AbstractCell<Item> { 

     public ItemCell() { 
      super("keydown"); 
     } 

     @Override 
     public void render(Context context, Item value, SafeHtmlBuilder sb) { 
      if (value != null) sb.appendEscaped(value.name); 
     } 

     @Override 
     protected void onEnterKeyDown(
       Context context, Element parent, Item value, NativeEvent event, ValueUpdater<Item> valueUpdater) { 
      LOG.info("ItemCell.onEnterKeyDown: value=" + value); 
      if (value == null || value.leaf) return; 
      ListDataProvider<Item> leafDataProvider = leafDataProviders.get(value.name); 
      if (leafDataProvider == null) return; 
      // -->> Here we generate new childs of selected root node 
      leafDataProvider.setList(generateLeafs()); 
     } 
    } 

    class ItemTreeViewModel implements TreeViewModel { 

     @Override 
     public <T> NodeInfo<?> getNodeInfo(T value) { 
      return new DefaultNodeInfo<Item>(
       value == null ? rootDataProvider : leafDataProviders.get(((Item) value).name), 
       new ItemCell()); 
     } 

     @Override 
     public boolean isLeaf(Object value) { 
      return (value instanceof Item) && ((Item) value).leaf; 
     } 
    } 

    private int id = 0; 
    private CellTree cellTree; 
    private ListDataProvider<Item> rootDataProvider; 
    private Map<String, ListDataProvider<Item>> leafDataProviders = new HashMap<String, ListDataProvider<Item>>(); 

    private List<Item> generateLeafs() { 
     List<Item> leafList = new ArrayList<Item>(5); 
     for (int j = 0; j < 5; ++j) 
      leafList.add(new Item("Leaf Item " + (++id), true)); 
     return leafList; 
    } 

    public void onModuleLoad() { 
     List<Item> rootList = new ArrayList<Item>(10); 
     for (int i = 0; i < 10; ++i) { 
      Item rootItem = new Item("Root Item " + (++id), false); 
      rootList.add(rootItem); 
      leafDataProviders.put(rootItem.name, new ListDataProvider<Item>(generateLeafs())); 
     } 
     rootDataProvider = new ListDataProvider<Item>(rootList); 

     cellTree = new CellTree(new ItemTreeViewModel(), null); 
     cellTree.setAnimationEnabled(true); 
     RootLayoutPanel.get().add(cellTree); 
    } 
}