2010-02-05 18 views
8

के दौरान दृश्यता बदलें मेरे पास एक AjaxPagingNavigator है। असल में एक निश्चित स्थिति पर, सूची जो AjaxPagingNavigator पृष्ठों को पुनः लोड किया गया है। जब ऐसा होता है तो सूची में केवल 1 पृष्ठ से अधिक होने पर ही मैं नेविगेटर प्रस्तुत करना चाहता हूं।(विकेट) AJAX प्रतिक्रिया

तो क्या किसी को पता है कि मैं एक हैंडलर को कहां संलग्न कर सकता हूं ताकि मैं अपने अजाक्स पेजिंग नेविगेटर में दृश्यता की स्थिति की जांच कर सकूं और दृश्यता को सक्षम/अक्षम कर सकूं ताकि जब नेविगेटर को अपडेट किया जा सके। 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" जो "सूची" और wrappings के साथ "नाविक" ताज़ा करता ताज़ा करता है।

यह वह घटना है जो पूरी चीज को ट्रिगर करती है।

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 का एक उपवर्ग में उम्मीद कर रहा था।

उत्तर

16

की तरह कुछ एक ओवरराइड isVisible विधि में महंगा संगणना कर से सावधान रहें, के रूप में विकेट प्रति किसी भी कॉल यदि आपने अनजाने में कर सकता गिनती अनुरोध-नहीं isVisible कई बार कॉल करेंगे।

आमतौर पर इसके बारे में जाने का सबसे अच्छा तरीका onConfigure ओवरराइड करना है और दृश्यता ध्वज मैन्युअल रूप से सेट करना है।

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

onConfigure अनुरोध प्रसंस्करण के दौरान सिर्फ एक बार कहा जाता है, और कहा जाता है सभी घटकों के लिए, उन है कि अदृश्य हैं (जबकि onBeforeRender ही दिखाई घटकों के लिए कहा जाता है) भी शामिल है।

+0

मुझे यह जवाब बहुत पसंद है।भविष्य में इस मुद्दे को पुनरुत्थान के लिए धन्यवाद :) –

+0

+1 - यह एक लाइफसेवर था (दो वोटों का हकदार है :)। लेकिन "ऑन कॉन्फिगर" पर "अविश्वसनीय" क्यों बुला रहा है? दिमित्री के उदाहरण का उपयोग करते हुए, यदि पहला AJAX "कुछ एक्स्पेंडेबल टॉक्यूलेट कैंडिशन" के लिए "झूठा" देता है और दूसरा रिटर्न "सत्य" देता है, तो मेरा मानना ​​है कि "isVisible" पूरी अभिव्यक्ति को झूठा कर देगा। –

+0

एडुआर्डो, यह स्पष्ट रूप से उपयोगकेस पर निर्भर करता है। कॉनफिगर श्रृंखला पर कहीं भी दृश्यता परिवर्तनों का सम्मान करने के लिए आमतौर पर कॉल एक दृश्य() है। – msparer

1

इसके बाद से मैं विकेट छुआ समय हो गया है, लेकिन अगर स्मृति में कार्य करता है:

आप हालत आप इच्छा के तहत isVisible() अपने "नाविक" वस्तु की विधि ओवरराइड नहीं कर सकते हैं, जैसे यह है कि केवल प्रदर्शित करता है?

उदा

.addComponent(new AjaxPagingNavigator(...) { 
    @Override public boolean isVisible() { 
    return model.getFound().size() > 25; 
    } 
}); 
+0

हा! मैं इतना बेवकूफ महसूस कर रहा हूं। यहां मैं दृश्यता को संलग्न करने और सेट करने के लिए पागल व्यवहार के सभी प्रकारों को देख रहा हूं। ओए! बीटीडब्लू "वापसी सुपर .isVisible() &&.getPageable()। GetPageCount()> 1;" शायद बेहतर है क्योंकि हम यह सुनिश्चित करना चाहते हैं कि कोई और हमें अदृश्य करने के लिए सेट करता है तो हम इसका सम्मान करते हैं। –

+2

बेवकूफ महसूस न करें ... जब मैं विकेट अनुप्रयोगों का विकास कर रहा था, तो मैंने आमतौर पर अपनी विभिन्न समस्याओं के समाधान की तलाश में बहुत समय बिताया, और जब मैंने उन्हें पाया तो वे अपेक्षाकृत लगभग हमेशा सरल थे। –

+2

मैं दूसरा कर दूंगा। मुझे लगता है कि विकेट डेवलपर्स ने बहुत अच्छा काम किया है, क्योंकि आम तौर पर जब मैं किसी समस्या को देखता हूं तो मुझे एहसास होता है कि इसे हल करना/ठीक करना और अधिक सहज ज्ञान युक्त था जिसे मैंने सोचा था। – Matt

संबंधित मुद्दे