質問
私は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>
だから私は、「リスト」や包装材料と一緒に「ナビゲーター」を更新し、「mainWrap」を更新し、AJAXイベントを持っています。
これは全体のことをトリガーするイベントです。
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のサブクラスでそれをカプセル化することを期待していた。
解決
Wicketの要求はなく誤って行う可能性があります任意の呼び出します。を数えるごとに複数回
isVisible
呼ぶようは、オーバーライドされたisVisible
方法で高価な計算を行うには注意してください
一般的に、これについて移動する最良の方法はonConfigure
をオーバーライドして、手動での可視性フラグを設定することです。
@Override
void onConfigure() {
super.onConfigure();
setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure
は(onBeforeRender
のみ可視コンポーネントに対して呼び出されている間)、見えないものも含め、すべてのコンポーネントの要求の処理中に一度だけ呼び出され、呼び出されます。
他のヒント
私は自動改札に触れたので、
これは、しばらくしているが、メモリが提供する場合:
あなたはそれが唯一の希望条件で表示されるように、あなたの「ナビゲーター」オブジェクトののisVisible()メソッドをオーバーライドすることはできません?
例えば。
のようなもの.addComponent(new AjaxPagingNavigator(...) {
@Override public boolean isVisible() {
return model.getFound().size() > 25;
}
});
所属していません StackOverflow