2011-10-26 81 views
2

我在<a/>標記中有一個組件,它在點擊時打開一個彈出窗口。這是一個適用於KML文件的「添加到最愛」鏈接。我的KML文件有一個名爲「favorite [boolean]」的字段。現在我想隱藏或顯示我的「添加到最愛」鏈接。在Wicket中隱藏組件

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())); 
    } 
} 

我嘗試添加因而行爲:

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

這ISN」:

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的一部分與一個表生成的KML列表不工作。我得到了與component.setVisible(false)相同的結果。我怎樣才能隱藏起來工作?

+1

你是否看了'ISVISIBLE()''Component'的方法是什麼?你可以覆蓋它,Wicket會處理剩下的事情,你只需要將組件添加到'AjaxRequestTarget'。這個解決方案有一些限制,但通常是有效的。 – biziclop

回答

1

那麼它發現我犯了一個可怕的錯誤,並把JavaScript附加到錯誤的地方。 AJAX請求未呈現。正確的類是由我的類CustomTracksAjaxDataTable擴展的CustomAjaxDataTable。我只是添加

new AjaxEventBehavior("onclick") 

,並覆蓋

protected void onEvent(AjaxRequestTarget ajaxRequestTarget) 

,它的偉大工程,現在

0

你可以使用一個CSS類這樣

.hiddenClass 
{ 
    visibility:hidden; 
} 

然後用AttributeModifier你的類添加到元素

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

或直接添加樣式到風格屬性

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

我得到'構造函數AttributeModifier(String,String)未定義'。也許我正在使用不同版本的Wicket。 –

+0

可能,答案是4歲 – osdamv