(النصيبيت) تغيير الرؤية أثناء استجابة AJAX

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

  •  18-09-2019
  •  | 
  •  

سؤال

لدي 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;
  }
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top