Frage

Ich habe einen AjaxPagingNavigator. Im Grunde auf einem bestimmten Zustand, die Liste, die die AjaxPagingNavigator Seiten neu geladen werden. Wenn dies geschieht, ich will nur den Navigator machen, wenn die Liste mehr als 1 Seite enthält.

So weiß jemand, wo ich einen Handler anhängen kann, so dass ich für eine Sichtbedingung in meinem AjaxPagingNavigator überprüfen und aktivieren / deaktivieren Sie Sichtbarkeit, so dass, wenn der Navigator über aktualisiert. Ajax ist es entweder sichtbar oder nicht?

Markup:

<div wicket:id="mainWrap">
    <div wicket:id="navigator"/>
    <div wicket:id="listWrap">
        <div wicket:id="list><!-- here be content --></div>
    </div>
</div>

Also ich habe ein Ajax-Ereignis, das „mainWrap“ aktualisiert, die den „Navigator“ erfrischen zusammen mit der „Liste“ und Umhüllungen.

Dies ist das Ereignis, das die ganze Sache löst.

 protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
     List foo = null; // do work to get list
     model.setFound(found); // update the model (thus updating "list")
     target.addComponent(mainWrap);
}

Edit: Ich weiß, dass ich schreiben kann

navigator.setVisibility(list.getPageCount() > 1);

Nach dem Navigator zu schaffen und nach dem Modell zu aktualisieren, aber ich habe gehofft, dass der AjaxPagingNavigator in einer Unterklasse verkapseln.

War es hilfreich?

Lösung

Seien Sie vorsichtig mit teueren Berechnungen in einer überschriebenen isVisible Methode zu tun, als Wicket nennt mehrere Male pro anforderungs keine Anrufe zu zählen isVisible Sie versehentlich tun könnten.

Normalerweise ist der beste Weg, um dies zu ist onConfigure außer Kraft zu setzen und die Sichtbarkeit Flag manuell eingestellt werden.

@Override
void onConfigure() {
    super.onConfigure();
    setVisible(isVisible() && someExpensiveToCalculateCondition);
}

onConfigure wird nur einmal während der Anforderungsverarbeitung genannt, und für alle Komponenten genannt, einschließlich denen, die nicht sichtbar sind (während onBeforeRender nur für sichtbare Komponenten genannt wird).

Andere Tipps

Es ist schon eine Weile her, seit ich Wicket berührt, aber wenn der Speicher dient:

Können Sie nicht die isVisible () -Methode des „Navigator“ Objekt außer Kraft setzen, so dass sie nur angezeigt, unter der Bedingung, die Sie wünschen?

z. so etwas wie

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top