(النصيبيت) تغيير الرؤية أثناء استجابة AJAX
سؤال
لدي ajaxphingingnavigator. أساسا في حالة معينة، القائمة التي يتم إعادة تحميل صفحات ajaxpageNavigator. عندما يحدث هذا، أريد فقط تقديم المستكشف عندما تحتوي القائمة على أكثر من صفحة واحدة.
لذلك يعرف أحد أين يمكنني إرفاق معالج حتى أتمكن من التحقق من حالة الرؤية في بلدي 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 الذي ينعش "Frewrap" الذي يقوم بتحديث "Navigator" جنبا إلى جنب مع "القائمة" والملاءات.
هذا هو الحدث الذي يثير كل شيء كله.
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
الطريقة، كما سيتصل النصيبيت isVisible
عدة مرات لكل طلب - عدم حساب أي مكالمة قد تفعله عن غير قصد.
عادة أفضل طريقة للذهاب حول هذا هو تجاوز onConfigure
وتعيين علامة الرؤية يدويا.
@Override
void onConfigure() {
super.onConfigure();
setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure
ويسمى مرة واحدة فقط أثناء معالجة الطلب، ودعا إلى جميع المكونات، بما في ذلك تلك غير مرئية (في حين onBeforeRender
يطلق عليه فقط للمكونات المرئية).
نصائح أخرى
لقد مر بعض الوقت لأنني لمست النصيبيت، ولكن إذا كانت الذاكرة تخدم:
هل لا يمكنك تجاوز الطريقة غير القابلة للإنترنت () كائن "Navigator" الخاص بك، بحيث يعرض فقط ضمن الحالة التي تريدها؟
على سبيل المثال شيء مثل
.addComponent(new AjaxPagingNavigator(...) {
@Override public boolean isVisible() {
return model.getFound().size() > 25;
}
});