2017-08-09 71 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组件的解决方案。