2013-02-09 8 views
5

कस्टम नियंत्रण में डेटा पास करते समय, मैंने नियंत्रण के अंदर से इस डेटा तक पहुंचने के लिए हमेशा कंपोजिटडेटा ऑब्जेक्ट का उपयोग किया है। कस्टम नियंत्रण के पहलेRenderResponse घटना को छोड़कर यह ठीक काम कर रहा है। एक उदाहरण के रूप में इस कोड डालें:कंपोजिट कस्टम नियंत्रण का डेटा पहले से पहले रेन्डर रेस्पॉन्स इवेंट

<xp:this.afterPageLoad><![CDATA[#{javascript:getComponent("lbl0").setValue(typeof(compositeData));}]]></xp:this.afterPageLoad> 
<xp:this.beforeRenderResponse><![CDATA[#{javascript:getComponent("lbl1").setValue(typeof(compositeData));}]]></xp:this.beforeRenderResponse> 
<xp:label value="" id="lbl0"/> 
<xp:label value="" id="lbl1"/> 

afterPageLoad घटना में, compositeData की typeof "com.ibm.xsp.binding.PropertyMap" है। फिर भी पहले RenderResponse घटना में, वही प्रकार का रिटर्न "अपरिभाषित" होता है।

मैं पहलेRenderResponse ईवेंट में समग्र डेटा को कैसे एक्सेस कर सकता हूं?

+0

"पृष्ठ लोड" पर पहले रेंडर रेस्पॉन्स की गणना करने का प्रयास करें ताकि # () –

+0

जब मैं पेज लोड पर ईवेंट की गणना करता हूं, तो मुझे एक त्रुटि मिलती है: "getComponent() शून्य है"। वैसे भी, केवल पृष्ठ लोड पर कंप्यूटिंग मेरे मामले में वास्तव में एक विकल्प नहीं है क्योंकि जब इसके पैरामीटर बदलते हैं तो मैं कस्टम नियंत्रण को आंशिक रूप से रीफ्रेश करना चाहता हूं। –

+0

मेरे अवलोकन के आधार पर, यह न केवल समग्र डेटा के लिए होता है बल्कि वर्तमान दस्तावेज़ और xpage में परिभाषित अन्य डेटा स्रोतों के लिए भी होता है। – rfk

उत्तर

6

में beforePageLoad या afterPageLoadcompositeData के लिए एक संदर्भ के साथ एक SSJS चर बनाने:

<xp:this.beforePageLoad> 
    <![CDATA[#{javascript: 
     var hlp=compositeData; 
    }]]> 
</xp:this.beforePageLoad> 

यह आपको प्रतिपादन चरण के दौरान PropertyMap का उपयोग करने की अनुमति देता है। यदि आप एक संपत्ति परीक्षण आप कर सकते हैं है तो यह इस तरह से acces:

<xp:this.afterRenderResponse> 
    <![CDATA[#{javascript: 
     print(hlp.test); 
    }]]> 
</xp:this.afterRenderResponse> 

संपादित करें: यह केवल तभी कारगर साबित पेज खोला जाता है (Pageload)। यदि आप पृष्ठ को रीफ्रेश करते हैं, तो यह काम नहीं करेगा। यह आंशिक refreshs साथ चलाने के लिए है, तो आप ऐसा करने के लिए है:

<xc:ccWithId test="I am your property" id="ccWithId" /> 

यह आप एक नियमित रूप में कस्टम नियंत्रण का उपयोग करने की अनुमति देता है:

सबसे पहले, आप अपने कस्टम नियंत्रण करने के लिए एक आईडी जोड़ने के लिए getComponent() के साथ घटक। xpages-noob द्वारा

<xp:this.beforeRenderResponse> 
    <![CDATA[#{javascript: 
     var cmp:com.ibm.xsp.component.UIIncludeComposite = getComponent("ccWithId"); 
     print("Value of 'test' -> " + cmp.getPropertyMap().getString("test")) 
    }]]> 
</xp:this.beforeRenderResponse> 

संपादित करें:: अब आप कस्टम नियंत्रण के कार्यक्रम में घटक है जो चर आप चाहते हैं रखती है की propertyMap उपयोग कर सकते हैं ऊपर से एक उदाहरण स्थिर कस्टम नियंत्रण संपत्तियों के लिए ठीक काम करता है। हालांकि, यदि किसी संपत्ति की गणना की जाती है, तो संपत्ति मानचित्र के विभिन्न कार्य फ़ंक्शन मूल्य के बजाय मूल्य बाध्यकारी ऑब्जेक्ट लौटाते हैं। इसलिए, एक एक समाधान के रूप में निम्नलिखित फ़ंक्शन का उपयोग कर सकते हैं:

var thisData:com.ibm.xsp.binding.PropertyMap=getComponent("ccWithId").getPropertyMap(); 
function getPara(key) { 
    var x=thisData.get(key); 
    if (@Ends(typeof(x),"ValueBinding")) return x.getValue(facesContext); 
    else return x 
} 

आप के लिए, उदाहरण के लिए, संपत्ति "परीक्षण" मिल चाहते हैं, getPara ("परीक्षण") कहते हैं। लौटाया गया मूल्य compositeData.test के बराबर होना चाहिए।

+0

मैंने पहले कोशिश की है, लेकिन यह चाल केवल पृष्ठ लोड होने पर पहली बार काम करती है। जब मैं आंशिक रूप से कस्टम नियंत्रण को रीफ्रेश करता हूं, तो सहायक चर के प्रकार (एचएलपी) को फिर से अपरिभाषित किया जाता है, संभवतः क्योंकि "var hlp = compositeData;" ताज़ा करने के दौरान निष्पादित नहीं किया गया है और एचएलपी अब मौजूद नहीं है। –

+0

आपके प्रश्न का 'आंशिक ताज़ा' हिस्सा नहीं देखा। मैंने अपना जवाब अपडेट कर लिया है। –

+0

आपके समाधान के लिए बहुत बहुत धन्यवाद। भले ही मुझे नहीं मिलता कि क्यों कंपोजिटडेटा पहले रेंडर रेस्पॉन्स ईवेंट में उपलब्ध नहीं है, यह अब ठीक काम करता है। मुझे उम्मीद है कि आपको कोई फर्क नहीं पड़ता कि मैंने आपके उत्तर में कुछ पंक्तियां जो उस मामले का वर्णन करती हैं जहां कस्टम नियंत्रण की गुण स्थिर नहीं हैं। –

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