2009-10-08 93 views
5

好吧,我一直在用這個撞牆來敲我的頭。我在Flex中有以下設置功能。Flex設置功能沒有被調用

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

如果我設置periodChangeAmount爲-1​​或1 set方法被炒魷魚。如果我將它設置爲零,它不會被解僱。這是怎麼回事?有誰知道爲什麼它不會被調用時,將其設置爲零。如果我將對象類型更改爲數字或對象,它仍然不能按預期工作。任何幫助將不勝感激。

+0

這對我來說很好。你能提供你用來測試的代碼嗎? – 2009-10-08 16:34:51

回答

8

你是否在追溯器中添加了一條痕跡以確保它不被調用?

periodChangeAmount a Bindable讀寫屬性?在這種情況下,flex在內部調用getter以確保要設置的值不是現有值。如果屬性的當前值(由getter返回)與要設置的值相同,則不調用setter。

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; 

追述輸出:

得到所謂:假
集調用真正的電流是假
得到所謂:真

注意,吸氣劑叫了兩聲,但二傳手只被召喚一次。在第二個作業中,由於要設置的當前值和值相同(true),因此不會調用setter。

我相信flex dev團隊這樣做是爲了避免冗餘綁定。

+0

無賴。如果我需要將對象作爲Bindable離開,是否有解決方法? – CodeMonkey 2009-10-08 17:08:11

+1

您可以手動調度數據綁定事件。 – 2009-10-08 17:11:33

+0

在調用setter之前檢查periodChangeAmount的值,如果值相同,則顯式調用refreshStartEndDates()。 – Amarghosh 2009-10-09 04:09:39

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; 

此事件確保即使屬性值相同,也調用該屬性的set方法。