2011-01-07 49 views
1

有人能夠在運行時正確更新單元格瀏覽器,即當您刪除節點或添加節點時,更改會立即反映在CEll瀏覽器中,因爲我正在使用List當我正在進行更改時,它不會被當場更新GWT CEll瀏覽器實時更新

回答

1

您可以使用ListDataProvider setList(...)方法進行動態更新。這是我如何通過RPC更新單元瀏覽器爲例:

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關閉所有孩子的根節點。 反正這樣的事情

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

顯然,僅僅改變數據提供者並刷新它是不夠的。

你也需要給力的影響細胞在這個例子中關閉並重新打開它,因爲

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); 
    } 
} 

在我的特殊例子中,小區ID路徑名,因此以下 實施getNode的()。

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; 
}