2012-12-17 10 views
9

प्राइमफ़ेस सही तरीके से बड़े संवाद का उपयोग कैसे करें?बड़े संवाद वाले प्राइमफेस - यह सही कैसे करें?

एचटीएमएल दुनिया में संवाद पहला संदेश और आसान सवालों के लिए ही इस्तेमाल किया जा करने के लिए सोचा गया था, लेकिन वे अक्सर तत्व चुनने DataTable से, उदाहरण के लिए के लिए उपयोग किया जाता है नहीं। क्या यह उचित उपयोग मामला नहीं है?

दोनों दिशाओं में डेटाटेबल बड़ा हो सकता है। हम पेजिनेटर का उपयोग कर सकते हैं और कार्यक्षमता को सीमित करते हुए केवल 5 पंक्तियां प्रदर्शित कर सकते हैं। क्यों 15 स्क्रीन प्रदर्शित नहीं करें, अगर उपयोगकर्ता स्क्रीन उस अनुमति देता है? हम उपयोगकर्ता को प्रदर्शित पंक्ति संख्या चुनने की संभावना दे सकते हैं, हां या नहीं?

लेकिन अगर हम ऐसा करते हैं, और यदि उपयोगकर्ता छोटी स्क्रीन पर 15 पंक्तियां चुनता है, तो संवाद बड़ा हो जाता है कि उस स्क्रीन के साथ और कुछ भी नहीं किया जा सकता है, क्योंकि बंद बटन अब उपलब्ध नहीं हैं। एक बड़ा, बुरा बग IMHO।

लेकिन इस मंच चर्चा के अनुसार http://forum.primefaces.org/viewtopic.php?f=3&t=19211 इसमें कुछ भी गलत नहीं है, और यहां तक ​​कि समाधान भी दिया गया है: बिल्कुल संवाद का उपयोग न करें! लेकिन मुझे ऐसे समाधानों पर विश्वास नहीं है क्योंकि मुझे पता है कि ब्राउज़र में स्क्रॉल हैं, और यदि सामग्री स्क्रीन से बड़ी है, तो स्क्रॉल प्रदर्शित होता है। इसलिए, कम से कम सैद्धांतिक रूप से, पृष्ठ पर संवाद को स्क्रॉल प्रदर्शित करने के तरीके में जोड़ना संभव है। कुछ 0px widht और 0px ऊंचाई divs को जोड़ना संभव है जो मुख्य पृष्ठ को प्रदर्शित किए गए सबसे बड़े संवाद की चौड़ाई और ऊंचाई पर अनुकूलित करेंगे, ताकि उपयोगकर्ता के लिए पृष्ठ शीर्ष पर संवाद खींचने और पहुंच प्राप्त करने के लिए हमेशा संभव रहेगा नीचे बटन

मेरा प्रश्न है: मैं बड़े मुद्दों के साथ उस मुद्दे को कैसे ठीक या काम कर सकता हूं? अगर वे वर्तमान व्यूपोर्ट बड़े हैं तो उन्हें पूरी तरह प्रदर्शित कैसे करें?

उत्तर

7

सामान्य समस्या प्राइमफेस में संवाद के लिए किसी भी दस्तावेज़ आकार अनुकूलन कोड की कमी थी। स्थिति के रूप में सेटिंग संवाद खराब था: तय किया गया जिससे उन्हें स्क्रॉल करने योग्य नहीं बनाया गया। तो मैं स्थिति छोड़ दिया है: तय जब संवाद खिड़की में ढाले किया गया था, स्थिति अन्यथा मैं निर्धारित किया है: निरपेक्ष और दस्तावेज़ आकार अनुकूलित इतना है कि संवाद फिट सकता है (जो स्क्रॉल करना सक्षम हो):

function handleResizeDialog(dialog) { 
    var el = $(dialog.jqId); 
    var doc = $('body'); 
    var win = $(window); 
    var elPos = ''; 
    var bodyHeight = ''; 
    var bodyWidth = ''; 
    // position:fixed is maybe cool, but it makes the dialog not scrollable on browser level, even if document is big enough 
    if (el.height() > win.height()) { 
     bodyHeight = el.height() + 'px'; 
     elPos = 'absolute'; 
    } 
    if (el.width() > win.width()) { 
     bodyWidth = el.width() + 'px'; 
     elPos = 'absolute'; 
    } 
    el.css('position', elPos); 
    doc.css('width', bodyWidth); 
    doc.css('height', bodyHeight); 
    var pos = el.offset(); 
    if (pos.top + el.height() > doc.height()) 
     pos.top = doc.height() - el.height(); 
    if (pos.left + el.width() > doc.width()) 
     pos.left = doc.width() - el.width(); 
    var offsetX = 0; 
    var offsetY = 0; 
    if (elPos != 'absolute') { 
     offsetX = $(window).scrollLeft(); 
     offsetY = $(window).scrollTop(); 
    } 
    // scroll fix for position fixed 
    if (pos.left < offsetX) 
     pos.left = offsetX; 
    if (pos.top < offsetY) 
     pos.top = offsetY; 
    el.offset(pos); 
} 
+1

शांत लेकिन जहां करना आप इसे बुलाओ ??? – linker85

+1

@ linker85 आम तौर पर संवाद पर .open() को कॉल करने के तुरंत बाद। –

+0

हाय, इसके लिए धन्यवाद। लेकिन मुझे पैरामीटर के रूप में क्या गुजरना चाहिए? – Reitffunk

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