Domanda

Ho un AjaxPagingNavigator. Fondamentalmente una certa condizione, la lista delle pagine AjaxPagingNavigator viene ricaricato. Quando questo accade voglio solo rendere il navigatore quando l'elenco contiene più di 1 pagina.

Quindi, qualcuno sa dove posso allegare un gestore in modo che possa verificare la presenza di una condizione di visibilità nel mio AjaxPagingNavigator e abilitare / disabilitare la visibilità in modo che quando il navigatore viene aggiornato via. ajax è visibile o no?

Markup:

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

Così ho un evento ajax che rinfresca "mainWrap", che rinfresca il "navigatore" insieme alla "lista" e involucri.

questo è l'evento che fa scattare il tutto.

 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: So che posso scrivere

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

dopo aver creato il navigatore e dopo l'aggiornamento del modello, ma speravo di incapsulare che in una sottoclasse di AjaxPagingNavigator.

È stato utile?

Soluzione

Fare attenzione con il fare i calcoli costosi in un metodo isVisible override, come Wicket chiamerà isVisible più volte per richiesta-senza contare tutte le chiamate si potrebbe inavvertitamente fare.

In genere il modo migliore per andare su questo è quello di ignorare onConfigure e impostare manualmente il flag di visibilità.

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

onConfigure viene chiamato solo una volta durante l'elaborazione delle richieste, e ha chiesto per tutti i componenti, compresi quelli che sono invisibili (mentre onBeforeRender viene chiamato solo per i componenti visibili).

Altri suggerimenti

E 'stato un po' da quando ho toccato Wicket, ma se la memoria non serve:

Non è possibile sostituire il metodo IsVisible () del vostro oggetto "navigatore", in modo tale che viene visualizzato solo sotto la condizione che si desidera?

es. qualcosa come

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top