У меня есть приложение типа браузера файлов, состоящее из CellTree, отображающего иерархию и панель браузера, отображающую содержимое текущего узла.Открыть дерево ячеек GWT для определенного узла
Приложение должно обрабатывать иерархии, которые могут быть слишком большими для эффективного управления CellTree, поэтому местоположение, отображаемое в панели браузера, не сильно связано с открытыми узлами в дереве.
Я хочу реализовать кнопку, которая откроет текущее местоположение обзора в CellTree. Моя модель данных на стороне сервера имеет родительские/дочерние ссылки на всех объектах, поэтому получение иерархии - это простой вопрос, но я борюсь с тем, как применить это к дереву.
Это моя текущая попытка, это метод виджета, который содержит мое дерево, и вызывается из приемника. Каждый объект RecordTreeLevel представляет собой уровень в дереве.
public void navigateTo(List<RecordTreeLevelProxy> hierarchy) {
TreeNode currentNode = tree.getRootTreeNode();
ListIterator iter = hierarchy.listIterator(hierarchy.size());
while (iter.hasPrevious()){
RecordTreeLevelProxy level = (RecordTreeLevelProxy) iter.previous();
Integer nodeIndex = locateNode(level.getUniqueRef(), currentNode);
if (nodeIndex != null){
currentNode = currentNode.setChildOpen(nodeIndex, true, true);
}
}
}
Это не работает, потому что цикл завершается в entirity, прежде чем дети будут добавлены к любому из узлов. Поэтому узел первого уровня открывается так, как должен, но не имеет детей, когда цикл появляется во второй раз.
Я не могу не чувствовать, что мне не хватает чего-то очевидного или делаю это неправильно, но я не вижу этого. Любая помощь очень apprieciated (даже если это сказать «не глупо, вы не можете сделать это таким образом)
Спасибо за ваш быстрый ответ. Томас, я думаю, что это в значительной степени то, что мне нужно делать. Как вы получаете TreeViewModel для синхронного запуска для кэшированных данных и async в противном случае? Используете ли вы пользовательский поставщик данных? –
также верно ваше предположение о функции locateNode, это именно то, что он делает.Вероятно, я должен был объяснить это в первую очередь. –
Теперь у меня это работает, изменив метод onRangeChange на моем dataprovider для проверки кеша на стороне клиента, прежде чем отправиться на сервер, ищущий данные. Большое спасибо еще раз за ваше ясное и консилиальное описание Томаса, это действительно помогло мне. –