Я не могу понять эту часть, ни пример демонстрационных примеров.
Я использую расширение AsyncDataProvider для привязки моего дерева к службе RPC. Вот мой метод:
public <T> NodeInfo<?> getNodeInfo(T value) {
/*
if (value instanceof Categoria) {
dataProvider.setCurrentParent((Categoria)value);
}
*/
return new DefaultNodeInfo<Categoria>(dataProvider, new CategoriaCell());
}
«currentParent» - мой материал: за исключением значений (null => root), я устанавливаю родительский параметр для передачи через RPC моему сервису. Собственно, в моем коде виджета:
dataProvider = new CategorieTreeDataProvider() {
@Override
protected void onRangeChanged(HasData<Categoria> display) {
updateTree(getCurrentParent());
}
};
private void updateTree(Categoria categoria) {
rpcService.getCategorie(categoria, new AsyncCallback<Categoria[]>() {
@Override
public void onSuccess(Categoria[] result) {
dataProvider.updateRowCount(result.length, true);
dataProvider.updateRowData(0, Arrays.asList(result));
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
});
}
Однако мой код rpc-сервера работает должным образом:
@Override
public Categoria[] getCategorie(Categoria parent) {
List<Categoria> categoryList = categorieDao.listByProperty("parent", parent);
for (Categoria c : categoryList) {
if (categorieDao.listByProperty("parent", c).size() == 0) {
c.setLeaf(true);
}
}
return categoryList.toArray(new Categoria[0]);
}
** Затем я добавляю некоторые данные в мои категории: «Дед», «Отец» и «Сын».
К сожалению, после загрузки моего виджета я вижу:
Дедушка правильно, с его "+", как и ожидалось;
Затем я нажимаю на нее и ...
Дед исчезает, и я вижу "Отца" с его "+"
то же самое для отца -> сын
Я подозреваю, что ошибка в использовании updateRowCount / updateRowData. **
Есть идеи?