繁体   English   中英

在Wicket中隐藏组件

[英]Hiding a component in Wicket

我在<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)相同的结果。 我怎么能躲起来工作?

好吧,它发现我犯了一个可怕的错误,并将javascript追加到错误的位置。 未呈现AJAX请求。 合适的类是CustomAjaxDataTable,它由我的类CustomTracksAjaxDataTable扩展。 我只是添加

new AjaxEventBehavior( "onclick" ) 

并覆盖

protected void onEvent( AjaxRequestTarget ajaxRequestTarget )

现在效果很好

您可以使用这样的CSS类

  .hiddenClass
{
    visibility:hidden;
}

然后使用AttributeModifier将类添加到元素

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

或直接将样式添加到样式属性

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM