2011-01-07 3 views
1

누군가가 런타임에 셀 브라우저를 올바르게 업데이트 할 수있었습니다. 즉, 노드를 제거하거나 노드를 추가하면 목록이 사용 중이기 때문에 변경 사항이 CEll 브라우저에 즉시 반영됩니다 내가 바꿀 때 그 자리에서 업데이트되지 않습니다.GWT CEll 브라우저 실시간 업데이트

답변

1

동적 업데이트를 위해 ListDataProvider setList (...) 메서드를 사용할 수 있습니다.

private void loadAllData(final ListDataProvider<Data> dataProvider) { 
    dBservice.getAllData(new AsyncCallback<List<Data>>() { 
     public void onSuccess(List<Data> result) { 
      dataProvider.setList(result); 
     } 

     public void onFailure(Throwable caught) { 
      caught.printStackTrace(); 
     } 
    }); 
} 
0

루트 노드에서 모든 자식을 닫으을 설치해야 cellBrowser를 새로 고침 : 여기 RPC를 통해 세포 브라우저를 업데이트하는 방법을 예입니다. 이

for (int i = 0; i < cellBrowser.getRootTreeNode().getChildCount(); i++) { 
     cellBrowser.getRootTreeNode().setChildOpen(i, false); 
    } 

AsyncDataProvider 같은 어쨌든 뭔가 새로 고침 데이터

가 작동
private final class Model implements TreeViewModel{ 
    private List<ZonaProxy> zonaList = null; 
    private List<CategoriaProxy> categoriaList = null; 

    public void setCategoriaList(List<CategoriaProxy> categoriaList) { 
     this.categoriaList = categoriaList; 
    } 

    public void setListZona(List<ZonaProxy> zonaList) { 
     this.zonaList = zonaList; 
    } 

    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    public <T> NodeInfo<?> getNodeInfo(T value) { 
      CategoryDataProvider dataProvider1 = new CategoryDataProvider(); 
      return new DefaultNodeInfo(dataProvider1, new CategoriaCell()); 
     } 

    /** 
    * Check if the specified value represents a leaf node. Leaf nodes cannot be 
    * opened. 
    */ 
    public boolean isLeaf(Object value) { 
     if (value instanceof CategoriaProxy){ 
      if (((CategoriaProxy) value).getLivello() == 3) { 
       return true; 
      } 
     } 
     return false; 
    } 

} 

private class CategoryDataProvider extends AsyncDataProvider<CategoriaProxy> 
{ 
    @Override 
    protected void onRangeChanged(HasData<CategoriaProxy> display) 
    { 
     requests.categoriaRequest().findAllCategorias(0, 8).with().fire(new Receiver<List<CategoriaProxy>>() { 
      @Override 
      public void onSuccess(List<CategoriaProxy> values) { 
       updateRowCount(values.size(), true); 
       updateRowData(0, values); 
      } 
     }); 
    } 
} 

를 호출합니다.

0

데이터 공급자를 변경하고 새로 고치는 것만으로는 충분하지 않습니다.

당신은 셀 ID가 따라서 패스는 getNode의 다음 구현()입니다 내 특정 예에서 예에서와 같이,

public void updateCellBrowser(String id) { 
    TreeNode node = getNode(cellBrowser.getRootTreeNode(),id); 

    if(node != null && ! node.isDestroyed()) { 
     TreeNode parent = node.getParent(); 
     int index = node.getIndex(); 

     parent.setChildOpen(index, false,true); 
     parent.setChildOpen(index, true, true); 
    } 
} 

그것을 닫고 다시 열 영향을받는 셀을 강제하는 것이 필요합니다.

private TreeNode getNode(TreeNode node, String id) { 
    for(int i=0; i < node.getChildCount(); i++) 
      if(node.isChildOpen(i)) { 
       Object value = node.getChildValue(i); 

       if(value instanceof String) { 
        String nodeId = ((String) value); 

        if(id.equals(nodeId)) 
         return node.setChildOpen(i, true); 

        if(id.startsWith(nodeId)) 
         getNode(node.setChildOpen(i, true),id); 
       } 
      } 
    return null; 
}