2017-08-09 70 views
1

我目前在Wicket/ShieldUI組合圖表方面存在問題。Wicket:ShieldUI圖表在更新時消失

在頁面初始化時,圖表顯示正常(即第一次渲染時)。這些圖表正在呈現爲ListView的一部分。

我需要能夠在這些圖表來更新數據和重繪。迄今爲止,我已經用兩種方法來解決這個問題,但沒有成功解決我的問題。

問題是,當/ a圖通過Ajax調用重新顯示時,它會消失,實際上不會由頁面加載時通過Shield UI js發生的voodoo進行處理。

在我的應用程序圖表中定義了一個配置。這些配置是列表視圖的驅動程序。這些配置包含對數據收集和圖表的引用,這些引用在創建時會利用這一點。

下面是一個在我的onInitialize中創建的簡單代碼示例。

final WebMarkupContainer visualizationContainer = new WebMarkupContainer(WICKET_ID_VIZ_CONTAINER); 
chartConfigListView = new ListView<ChartConfig>(WICKET_ID_CHART_CONTAINER_LIST_VIEW, chartConfigList) { 
    @Override 
    protected void populateItem(ListItem<ChartConfig> item) 
    { 
     final ChartPanel chartPanel = new ChartPanel(WICKET_ID_CHART_THE_CHART, config); 
     chartPanel.setOutputMarkupId(true); 
     item.addOrReplace(chartPanel); 
    } 
}; 
visualizationContainer.add(chartConfigListView); 

ChartPanel的內部(onInitialize)實例化新ShieldUI圖表和將其添加到ChartPanel組分(ChartPanel延伸面板)。

因此,第一次ListView填充並創建圖表時,一切都很好。隨後任何時候ListView填充和創建圖表實例都會使用更新後的數據集創建,圖表會消失,將html元素呈現爲完全空白的div。

有沒有人有任何想法我可以如何拯救我的圖表被遺忘?

+0

請注意,在上面的例子中,我使用item.addOrReplace()。我也嘗試過使用簡單的.add(),它也沒有工作。 –

+0

你是否用一些javascript來初步繪製圖表? – WiseTree

+0

不是直接。如果有的話,它會在頁面加載時運行的JQuery JavaScript代碼中鬆動。 –

回答

1

雖然我還沒有設法使這項工作與ListView方法(因爲我有點懶),我找到了解決方案。

在Ajax請求進來,可調用:

wicketChart.reInitialize(ajaxRequestTarget); 

和圖表將它現在包含的數據重繪。

reInitialize方法是WidgetComponentBase類的一部分,所以我期望這可能是一個用於其他Wicket組件的解決方案。