2011-01-07 11 views
1

konnte jemand einen Zellenbrowser zur Laufzeit korrekt aktualisieren, dh wenn Sie einen Knoten entfernen oder einen Knoten hinzufügen, wird die Änderung sofort im CEll Browser reflektiert, da ich eine Liste verwende und wenn ich eine Änderung mache, wird sie nicht an Ort und Stelle aktualisiert.GWT CEll Browser Echtzeit Update

Antwort

1

Sie können ListDataProvider setList (...) Methode für dynamische Updates verwenden. Hier ist ein Beispiel, wie ich Zelle Browser über RPC aktualisieren:

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

aufzufrischen eine cellBrowser Sie haben alle das Kind auf dem Wurzelknoten zu schließen. ohnehin so etwas wie dieses

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

der AsyncDataProvider ruft Auffrischungen Daten

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

es funktioniert.

0

Offenbar reicht es nicht, den Datenprovider zu ändern und zu aktualisieren.

Sie müssen auch die betroffene Zelle zwingen, um es zu schließen und wieder öffnen, wie in diesem Beispiel

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

In meinem speziellen Beispiel der Zelle ids sind Pfadnamen daher die folgenden Implementierung von 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; 
} 
Verwandte Themen