2009-10-08 18 views
5

नहीं कहा जा रहा है ठीक है, मैं इस के साथ दीवार के खिलाफ अपने सिर को टक्कर लगी हूं। मेरे पास फ्लेक्स में निम्न सेट फ़ंक्शन है।फ्लेक्स सेट फ़ंक्शन को

public function set periodChangeAmount(value:int):void 
    { 
     _PeriodChangeAmount = value; 
     refreshStartEndDates(); 
    } 

यदि मैं अवधि निर्धारित करता हूं तो 1 या 1 सेट सेट विधि निकाल दी जाती है। अगर मैं इसे शून्य पर सेट करता हूं तो इसे निकाल दिया नहीं जाता है। क्या बात है? क्या किसी को पता है कि इसे शून्य पर सेट करते समय क्यों नहीं कहा जाएगा। यदि मैं ऑब्जेक्ट प्रकार को किसी संख्या या यहां तक ​​कि किसी ऑब्जेक्ट में बदलता हूं तो यह अभी भी अपेक्षित काम नहीं करता है। किसी भी तरह की सहायता का स्वागत किया जाएगा।

+0

यह मेरे लिए ठीक काम करता है। क्या आप इस कोड का उपयोग करने के लिए उपयोग कर रहे कोड को प्रदान कर सकते हैं? –

उत्तर

8

क्या आपने यह सुनिश्चित करने के लिए सेटटर में एक निशान लगाया था कि इसे नहीं कहा जाता है?

periodChangeAmountBindable पढ़ना-लिखने की संपत्ति है? उस मामले में फ्लेक्स आंतरिक रूप से गेटटर को यह सुनिश्चित करने के लिए कहते हैं कि सेट करने के लिए मूल्य मौजूदा मान नहीं है। यदि संपत्ति का वर्तमान मूल्य (गेटटर द्वारा लौटाया गया) वैल्यू सेट के समान है, तो सेटटर को नहीं कहा जाता है।

private var privateVar:Boolean = false; 

[Bindable] 
public function set readWriteProp(value:Boolean):void 
{ 
    trace("set called with " + value + " current is " + privateVar); 
    privateVar = value; 
} 
public function get readWriteProp():Boolean 
{ 
    trace("get called : " + privateVar); 
    return privateVar; 
} 
//... 
a.readWriteProp = true; 
a.readWriteProp = true; 

पता लगाया उत्पादन:

कहा जाता हो: सच

ध्यान दें कि गेटर दो बार बुलाया गया था लेकिन झूठे
सेट सच वर्तमान के साथ कहा जाता है झूठी
कहा जाता हो जाता है सेटर को केवल एक बार बुलाया गया था। दूसरे असाइनमेंट में, चूंकि वर्तमान मान और मान सेट होने के समान हैं (सत्य), सेटर को कॉल नहीं किया जाता है।

मेरा मानना ​​है कि फ्लेक्स देव टीम ने बाध्यकारी में अनावश्यकता से बचने के लिए ऐसा किया था।

+0

बमर। अगर मुझे ऑब्जेक्ट को बाइंडबल के रूप में छोड़ने की ज़रूरत है तो क्या इसके आसपास कोई रास्ता है? – CodeMonkey

+1

आप डेटा बाध्यकारी घटनाओं को मैन्युअल रूप से प्रेषित कर सकते हैं। –

+0

सेटर कॉल करने से पहले अवधि के मूल्य की जांच करें और रीफ्रेश स्टार्ट करें EndDateDates() स्पष्ट रूप से यदि यह वही मान है। – Amarghosh

1

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

private var privateVar:Boolean = false; 
[Bindable("bindableEventProperty")] 

public function set readWriteProp(value:Boolean):void 
{  
    trace("set called with " + value + " current is " + privateVar); 
    privateVar = value; 
} 
public function get readWriteProp():Boolean 
{ 
    trace("get called : " + privateVar);  
    return privateVar; 
} 

dispatchEvent(new Event("bindableEventProperty")); 
a.readWriteProp = true; 
a.readWriteProp = true; 

यह घटना सुनिश्चित करती है कि संपत्ति के सेट विधि को तब भी कहा जाता है जब संपत्ति मूल्य समान होता है।