Скрытие компонента в Wicket - PullRequest
       2

Скрытие компонента в Wicket

2 голосов
/ 27 октября 2011

У меня есть компонент внутри тега <a/>, который при нажатии открывает всплывающее окно. Это ссылка «добавить в избранное», которая работает с файлами KML. В моем KML-файле есть поле с именем «favourite [boolean]». Теперь я хотел бы скрыть или показать свою ссылку «добавить в избранное». Список KML создается с помощью таблицы:

public class CustomTracksAjaxDataTable<T> extends CustomAjaxDataTable<T> {
    public CustomTracksAjaxDataTable(String id, List<IColumn<T>> iColumns,
      ISortableDataProvider<T> tiSortableDataProvider, int rowsPerPage) {
        super(id, iColumns, tiSortableDataProvider, rowsPerPage);
    }

    protected void onEventHandler(AjaxRequestTarget ajaxRequestTarget,
      KMLFile file) {
        setKMLData(file); // it just update map, dont care about it
        add(new FavouriteStarIconState(file.isSaved()));
    }
}

Я попытался добавить поведение таким образом:

public class FavouriteStarIconState extends AbstractDefaultAjaxBehavior {
    private boolean isFavourite;

    public FavouriteStarIconState(boolean isFavourite) {
        super();
        this.isFavourite = isFavourite;
    }

    @Override
    protected void respond(AjaxRequestTarget target) {
        if (isFavourite) {
            target.appendJavascript("jQuery('.map_container_star').css(
              {'display' : 'none' });");
        } else {
            target.appendJavascript("jQuery('.map_container_star').css(
              {'display' : 'block' });");
        }
    }

    @Override
    public void renderHead(IHeaderResponse response) {
        response.renderOnLoadJavascript(getCallbackScript().toString());
    }
}

Часть HTML, содержащая компонент:

<div id="map_container">
    <a wicket:id="favourite_star" class="map_container_star"></a>
</div>

Это не работает. Я получил тот же результат с component.setVisible(false). Как мне спрятаться на работе?

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Ну, выясняется, что я совершаю ужасную ошибку и помещаю добавление javascript в неправильное место. Запрос AJAX не был обработан. Правильный класс был CustomAjaxDataTable, который был расширен моим классом CustomTracksAjaxDataTable. Я просто добавляю

new AjaxEventBehavior( "onclick" ) 

и переопределить

protected void onEvent( AjaxRequestTarget ajaxRequestTarget )

и теперь прекрасно работает

0 голосов
/ 27 октября 2011

Вы можете использовать класс CSS, подобный этому

  .hiddenClass
{
    visibility:hidden;
}

, затем с помощью AttributeModifier вы добавите класс к элементу

component.add(new AttributeModifier("class", "hiddenClass"));

или добавите стиль напрямуюк атрибуту style

component.add(new AttributeModifier("style", "visibility:hidden;"));
...