AS3

2009-09-15 14 views
17

में केवल पढ़ने के लिए गेटर के लिए बाइंडिंग निम्नलिखित कोड पर विचार करें। मैंने एक अलग गेटटर प्रदान किया है जो एक ही मूल्य को पुनः प्राप्त करता है, केवल उचित तिथि में परिवर्तित हो जाता है। यह केवल एक गेटटर है और इसके डेटा प्राप्त करने के लिए संख्यात्मक संपत्ति के लिए सेटटर पर निर्भर करता है; इसलिए प्रभावी FromDate संपत्ति प्रभावी रूप से केवल पढ़ने के लिए है।AS3

प्रभावी FromDateJulian संपत्ति पर डेटा बाध्यकारी कार्य; कोई भी अद्यतन ठीक काम करता है और सब कुछ ठीक से सूचित करता है। लेकिन जब effectiveFromDate के लिए बाध्य (मनुष्य केवल) संपत्ति, मैं संकलक से एक चेतावनी मिलती है:

warning: unable to bind to property 'effectiveToDate' on class 'com.vo::ReportHeaderVO' 

इस केवल पढ़ने के लिए संपत्ति के लिए बाध्य करने के लिए यह संभव बनाने के लिए एक तरीका है? मुझे लगता है कि मुझे सेटटर पर एक ईवेंट भेजना होगा जो केवल पढ़ने योग्य संपत्ति को प्रभावित करता है, लेकिन मुझे नहीं पता कि यह कैसा दिखता है।

यह एक साधारण उदाहरण है, आप केवल पढ़ने योग्य संपत्ति की कल्पना कर सकते हैं जो कई सेटर्स पर काम करने के लिए निर्भर करता है और जब इनमें से कोई भी सेटर्स अपडेट किया जाता है तो केवल पढ़ने वाली संपत्ति को संपत्ति को आग लगाना पड़ता है। कोई विचार? अगर मुझे कुछ भी स्पष्ट करने की ज़रूरत है तो कृपया मुझे बताएं।

अद्यतन: एडोब प्रलेखन यहाँ से:

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_8.html

केवल डेटा पढ़ने के लिए स्रोत के रूप में गुण का उपयोग करना बाध्यकारी

आप स्वचालित रूप से एक रीड-ओनली संपत्ति का उपयोग कर सकते गेटटर विधि द्वारा परिभाषित, जिसका अर्थ है कोई सेटर विधि नहीं, डेटा-बाध्यकारी अभिव्यक्ति के लिए स्रोत। फ़्लेक्स डेटा शुरू होने पर पर डेटा बाध्यकारी करता है।

क्योंकि डेटा एक केवल पढ़ने के लिए संपत्ति से बाध्यकारी आवेदन में केवल एक बार होता है शुरू, आप केवल पढ़ने के लिए संपत्ति के लिए [Bindable] मेटाडाटा टैग छोड़ देते हैं।

और यह निरंतर मूल्यों के लिए समझ में आता है, लेकिन इस मामले में मूल्य बदलता है, यह सीधे सेट नहीं होता है।

उत्तर

16

रीडोनली गेटर बाइंडबल बनाएं और मूल सेटटर विधि से संबंधित ईवेंट प्रेषित करें।

[Bindable(event="ReportHeaderVO_effectiveFromDateJulian_updated")] 
public function set effectiveFromDateJulian (value:Number) : void 
{ 
    _effectiveFromDateJulian = value; 
    dispatchEvent(new FlexEvent("ReportHeaderVO_effectiveFromDateJulian_updated")); 
    dispatchEvent(new FlexEvent("ReportHeaderVO_effectiveFromDate_updated")); 
} 
[Bindable(event="ReportHeaderVO_effectiveFromDate_updated")] 
public function get effectiveFromDate (date:Date) : Date 
{ 
    return DateUtil.convertJDEJulianToDate(_effectiveFromDateJulian); 
} 
+0

यह बिल्कुल सही था, जो मैं खोज रहा था। इसे देखने के बाद, यह पूरी तरह से समझता है कि यह कैसे और क्यों काम करता है, लेकिन यह अभी भी दस्तावेज़ों में स्पष्ट नहीं है कि यह कैसे होना चाहिए। तो जब आप [बाइंडबल (इवेंट)] मेटाडाटा डालते हैं, भले ही दस्तावेज़ इसे सेटटर पर डालते हैं, फिर भी वास्तव में यह संपत्ति (सार्वजनिक रूप से उजागर संपत्ति) पर लगाया जा रहा है। यह गेटर पर आसानी से लगाया जा सकता है और यह वही काम करता है। जिज्ञासा से बाहर, क्या आपके पास दस्तावेज या कहीं और से कोई लिंक है जो ऐसा करने के लिए दिखाता है? फिर से धन्यवाद! इससे बहुत मदद मिली। –

+2

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2।एचटीएमएल # 1 9 30306 कहता है कि "यदि आप घटना का नाम निर्दिष्ट करते हैं, तो स्रोत संपत्ति में परिवर्तन होने पर ईवेंट को प्रेषित करना आपकी ज़िम्मेदारी है।" मैंने अभी कोशिश की और यह काम किया। गुगलिंग ने मुझे http://www.deitte.com/archives/2009/04/bindable_getter.htm और http://joshblog.net/2009/07/15/flex-readonly-bindable-getter-ignored-warning- समझाया गया/ – Amarghosh

+1

और हाँ, इससे कोई फ़र्क नहीं पड़ता कि आपने [बाइंडेबल] टैग (गेटटर या सेटर) कहां रखा है, यह संपत्ति पर लागू होता है। हालांकि asdoc के प्रयोजनों के लिए, इसे सेटटर पर रखना अच्छा है। – Amarghosh