Обработчики кликов для деревьев в GXT 3?

Я просматривал GXT3 Tree API для какого-то способа выполнить действие, когда я щелкаю или дважды щелкаю узел в дереве, и я не могу найти ничего, что могло бы работать.

Я знаю, что TreeGrid имеет обработчик CellClickHandler и CellDoubleClick, но для Tree похоже ничего подобного нет. Существует общий метод addHandler, унаследованный от Widget, но похоже, что он будет применяться ко всему дереву, а не к конкретному узлу.

Есть ли что-то, что я упускаю из виду, или другой/лучший способ сделать это?


person Brendan Loyot    schedule 24.05.2012    source источник


Ответы (4)


используйте модель выбора TreePanel:

treePanel.getSelectionModel().addSelectionChangedListener(
        new SelectionChangedListener<BaseTreeModel>() {

            @Override
            public void selectionChanged(SelectionChangedEvent<BaseTreeModel> se) {

                BaseTreeModel selectedItem = se.getSelectedItem();

                // implement functionality
            }
        }
);

см. TreePanelAPI для справки.

person Eliran Malka    schedule 25.05.2012
comment
Элиран спасибо за ответ. Если я не ошибаюсь, TreePanel из GXT 2 и больше не существует в GXT3, так как они изменили принцип работы деревьев. В любом случае, я только сейчас понял, что в проводнике GXT есть реализация дерева действий ячейки, которую можно использовать для того, что мне нужно. - person Brendan Loyot; 25.05.2012
comment
о, я не заметил, что вы имеете в виду версию 3. в любом случае, пожалуйста, добавьте решение в качестве ответа на свой вопрос, чтобы другие могли извлечь из него пользу, спасибо. - person Eliran Malka; 25.05.2012

Используйте это для одиночного выбора

    tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    tree.getSelectionModel().addSelectionHandler(new SelectionHandler<MenuView.MenuDto>() {

        public void onSelection(SelectionEvent<MenuDto> event) {
            MenuDto mnu = event.getSelectedItem();
            Info.display("Tree Handler", mnu.getDescripcion());
        }
    });

Для множественного выбора

    tree.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<MenuView.MenuDto>() {

        public void onSelectionChanged(SelectionChangedEvent<MenuDto> event) {
            List<MenuDto> mnus = event.getSelection();
            Info.display("Tree Handler", mnus.get(0).getDescripcion());
        }
    });
person Juan Rojas    schedule 13.06.2012

Другой вариант — переопределить метод Tree onDoubleClick (или onClick):

Tree tree = new Tree<MyModel, String>(store, valueProvider){            
    @Override
    protected void onDoubleClick(Event event) {
        TreeNode<MyModel> node = findNode(event.getEventTarget().<Element> cast());
        Info.display("Double Click", "You double clicked this node!");
        super.onDoubleClick(event);
   }
};
person Leah Buckley    schedule 18.06.2012

Разобрался. Этого можно добиться с помощью Cell Action Tree, реализацию которого можно найти здесь: http://www.sencha.com/examples/#ExamplePlace:cellactiontree

person Brendan Loyot    schedule 25.05.2012