2017-08-09 1 views
1

Ich habe derzeit ein Problem mit der Wicket/ShieldUI Combo in Bezug auf Charting.Wicket: ShieldUI Diagramm verschwindet auf Update

Bei der Seiteninitialisierung werden Diagramme gut dargestellt (d. H. Beim ersten Mal, wenn sie gerendert werden). Diese Diagramme werden als Teil eines ListView gerendert.

Ich muss in der Lage sein, die Daten in diesen Diagrammen zu aktualisieren und neu zu zeichnen. Ich habe mich bisher auf zwei Arten an dieses Problem gewandt, ohne Erfolg für mein Problem.

Das Problem ist, dass, wenn das/a-Diagramm über einen Ajax-Aufruf neu gerendert wird, verschwindet, effektiv nicht von Voodoo über die Shield UI js beim Laden der Seite erfolgt.

In meiner App sind Diagramme durch eine Konfiguration definiert. Diese Konfigurationen sind der Treiber für die Listenansicht. Die Configs enthalten einen Verweis auf die Datensammlung und die Diagramme verwenden diese bei der Erstellung.

Ein einfaches Codebeispiel für das, was in meinem onInitialize erstellt wird, ist unten.

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 Interna (OnInitialize) instanziiert ein neues ShieldUI Diagramm und fügen Sie es dem ChartPanel Komponente (ChartPanel erstreckt Panel).

Also das erste Mal, dass das ListView die Diagramme auffüllt und erstellt, ist alles in Ordnung. Jedes weitere Mal, wenn der ListView gefüllt wird und neue Chart-Instanzen mit einem aktualisierten Dataset erstellt werden, verschwinden die Charts und die HTML-Elemente werden als vollständig leere Divs gerendert.

Hat jemand eine Idee, wie ich meine Diagramme vor dem Vergessen bewahren kann?

+0

Beachten Sie, dass ich im obigen Beispiel item.addOrReplace() verwenden. Ich habe das auch mit dem einfachen .add() versucht, was auch nicht funktioniert hat. –

+0

Verwenden Sie Javascript, um die Zeichnung der Diagramme zu initialisieren? – WiseTree

+0

Nicht direkt. Wenn dies der Fall ist, wird es im JavaScript-Code von JQuery, der beim Laden der Seite ausgeführt wird, entfernt. –

Antwort

1

Während ich es nicht geschafft habe, dies mit dem ListView-Ansatz zu machen (weil ich ein bisschen faul bin), habe ich die Lösung gefunden.

Nach einer Ajax-Anfrage in der kommenden, kann man nennen:

wicketChart.reInitialize(ajaxRequestTarget); 

und das Diagramm wird es jetzt neu gezeichnet mit dem Datum enthält.

Die reInitialize-Methode ist Teil der WidgetComponentBase-Klasse, also erwarte ich, dass dies eine Lösung für andere Wicket-Komponenten sein könnte.

Verwandte Themen