Flex集函数未被调用

时间:2009-10-08 16:24:46

标签: flex

好吧,我一直用这个把头撞在墙上。我在Flex中有以下设置功能。

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

如果我将periodChangeAmount设置为-1或1,则会触发set方法。如果我将其设置为零,则不会被触发。这是怎么回事?有没有人知道为什么在将其设置为零时不会被调用。如果我将对象类型更改为数字甚至是对象,它仍然无法按预期工作。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:8)

您是否在设置器中放置了一条迹线以确保它没有被调用?

periodChangeAmountBindable读写属性吗?在这种情况下,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;

跟踪输出:

  

被叫:假
  用真电流调用的设置是假的   被叫:真的

请注意,getter被调用了两次,但setter只调用了一次。在第二个赋值中,由于要设置的当前值和值相同(true),因此不会调用setter。

我相信flex dev团队这样做是为了避免绑定的冗余。

答案 1 :(得分: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方法。