2013-02-15 2 views
0

Я новичок в GWT, и у меня возникают проблемы с созданием дерева, дочерние узлы которого динамически растут. Когда моя страница загружается дерево выглядит примерно так:Как создать CellTree, который динамически растет

ROOT_Node 
    | 
    |_Child 1 
    | 
    |_Child 2 

Когда пользователь нажимает на ребенка 1 или ребенка 2, они расширяются, как это:

ROOT_Node 
    | 
    |_Child 1 
    | | 
    | |_Child 1_1 
    | |_Child 1_2 
    | 
    |_Child 2 

Если пользователь нажимает на ребенка 1_1, если являются дочерними узлами Child 1_1, они снова будут расширяться. И все узлы будут динамически расти. Я сделал некоторые базовые образцы на GWT TreeCell и понял, что он не будет динамически расти. Поэтому всякий раз, когда пользователь нажимает на дочерний узел, я удаляю CellTree и добавляю новый CellTree. Это слишком плохо. По крайней мере, я должен был бы написать код, который может обрабатывать любое количество дочерних узлов и их дочерних узлов.

Я просмотрел несколько обучающих материалов GWT, включая официальные учебники GWT. Но не могли найти примеры, связанные с этой проблемой. Учебники содержат только «if (value instanceof SomeClass), затем выполните это», добавьте какой-то обработчик выбора и т. Д. Если я использую этот подход, я должен написать много блоков if-then-else.

Может кто-нибудь, пожалуйста, помогите мне исправить эту проблему. Или есть ли простой способ отобразить дерево без использования CellTree? Помогут ли мне списки?

ответ

0

CellTree DOES поддержка динамических данных.

Вы можете использовать AsyncDataProvider, если хотите поддерживать ленивую загрузку, или иерархия не известна раньше.
Также есть демонстрационный пример, показывающий использование динамических данных, которые можно найти here.

Использование всех if (value instanceof SomeClass) необходимо, если вы хотите использовать разные Cells для каждого уровня дерева (см. Пример витрины).

Если Child1 и Child1_2 имеют тот же тип и должны быть визуализированы таким же образом, вы можете использовать другой подход. Вместо того, чтобы проверять, является ли объект конкретным классом, вы можете проверить поле в объекте, которое сообщает вам о том, к какому уровню принадлежит его дерево, или если ваши объекты связаны друг с другом посредством ссылок (т. Е. Дочерний объект имеет ссылку на его родительский объект), вы также можете использовать эту информацию для создания своего TreeViewModel