好吧,我一直用这个把头撞在墙上。我在Flex中有以下设置功能。
public function set periodChangeAmount(value:int):void
{
_PeriodChangeAmount = value;
refreshStartEndDates();
}
如果我将periodChangeAmount设置为-1或1,则会触发set方法。如果我将其设置为零,则不会被触发。这是怎么回事?有没有人知道为什么在将其设置为零时不会被调用。如果我将对象类型更改为数字甚至是对象,它仍然无法按预期工作。任何帮助将不胜感激。
答案 0 :(得分:8)
您是否在设置器中放置了一条迹线以确保它没有被调用?
periodChangeAmount
是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;
跟踪输出:
被叫:假
用真电流调用的设置是假的 被叫:真的
请注意,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方法。