2011-01-07 8 views
1

кто-то был в состоянии правильно обновить браузер ячейки во время выполнения, то есть когда вы удалите узел или добавите узел, это изменение немедленно отразится в обозревателе CEll, потому что я использую список и когда я делаю изменения, он не обновляется на местеОбновление в реальном времени GWT CEll в реальном времени

ответ

1

Вы можете использовать метод ListLataProvider 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); 
    } 
} 

В моем конкретном примере ячейка идентификаторы, следовательно, имена пути следующих реализации 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; 
} 
Смежные вопросы