Pergunta

Eu tenho um AjaxPagingNavigator. Basicamente em uma determinada condição, a lista das páginas AjaxPagingNavigator é recarregado. Quando isso acontece, eu só quero tornar o navegador quando a lista contém mais de 1 página.

Então, alguém sabe onde eu posso anexar um manipulador para que eu possa verificar se há uma condição de visibilidade em minha AjaxPagingNavigator e ativar / desativar a visibilidade de modo que quando o navegador é atualizado via. ajax é visível ou não?

Markup:

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

Então, eu tenho um evento ajax que refresca "mainWrap", que atualiza o "navegador", juntamente com a "lista" e envolvimentos.

Este é o evento que desencadeia a coisa toda.

 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: Eu sei que eu posso escrever

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

depois de criar o navegador e depois de atualizar o modelo, mas eu estava esperando para encapsular que em uma subclasse de AjaxPagingNavigator.

Foi útil?

Solução

Tenha cuidado com a realização de cálculos caros em um método isVisible substituído, como Wicket chamará isVisible várias vezes por pedido-sem contar todas as chamadas que você pode inadvertidamente fazer.

Normalmente a melhor maneira de fazer isso é para substituir onConfigure e definir o sinalizador de visibilidade manualmente.

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

onConfigure é chamado apenas uma vez durante o processamento do pedido, e chamou para todos os componentes, incluindo aqueles que são invisíveis (enquanto onBeforeRender só é chamado para componentes visíveis).

Outras dicas

Tem sido um tempo desde que eu toquei Wicket, mas se serve de memória:

Você não pode substituir o isVisible () de seu objeto "navegador", de tal forma que apenas apresenta sob a condição que você deseja?

por exemplo. algo como

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top