(Калитка) Измените видимость во время ответа ajax

StackOverflow https://stackoverflow.com/questions/2209895

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть AjaxPagingNavigator.В принципе, при определенном условии список страниц AjaxPagingNavigator перезагружается.Когда это происходит, я хочу отображать навигатор только тогда, когда список содержит более 1 страницы.

Итак, кто-нибудь знает, где я могу прикрепить обработчик, чтобы я мог проверять состояние видимости в моем AjaxPagingNavigator и включать / отключать видимость, чтобы при обновлении навигатора через.ajax это либо видно, либо нет?

Разметка:

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

Итак, у меня есть событие ajax, которое обновляет "mainWrap", которое обновляет "навигатор" вместе со "списком" и оболочками.

это событие, которое запускает все это.

 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);
}

Редактировать:Я знаю, что могу писать

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

после создания навигатора и после обновления модели, но я надеялся инкапсулировать это в подкласс AjaxPagingNavigator.

Это было полезно?

Решение

Будьте осторожны при выполнении дорогостоящих вычислений в переопределенном isVisible метод, поскольку Wicket будет вызывать isVisible несколько раз за запрос — не считая любых звонков, которые вы могли бы сделать непреднамеренно.

Как правило, лучший способ добиться этого - переопределить onConfigure и установите флаг видимости вручную.

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

onConfigure вызывается только один раз во время обработки запроса и вызывается для всех компонентов, включая те, которые невидимы (пока onBeforeRender вызывается только для видимых компонентов).

Другие советы

Прошло много времени с тех пор, как я прикасался к Калитке, но, если мне не изменяет память:

Можете ли вы не переопределять метод isVisible() вашего объекта "navigator" таким образом, чтобы он отображался только при том условии, которое вы желаете?

например ,что - то вроде

.addComponent(new AjaxPagingNavigator(...) {
  @Override public boolean isVisible() { 
    return model.getFound().size() > 25;
  }
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top