没有指定事件名称的可绑定功能

时间:2011-03-22 16:36:38

标签: actionscript-3 flex3

在flex中创建函数Bindable而不指定事件名称有什么影响?我已经在我的代码中完成了这项工作,它似乎没有任何相关事件正常工作(但它会产生警告)。如果我从这些函数中删除绑定,它将影响代码并且如果函数的返回值发生更改,则不会反映更改。

有人可以解释一下,即使没有任何与[Bindable]标签相关的事件,这种Bindable功能如何以及为什么会起作用。

示例:

<mx:Image id="a" source="{getImage(1)}" useHandCursor="true" buttonMode="true" width="10" height="10" click="finalize(event)" autoLoad="true"/>

[Bindable] private var _ratingSelected:int;

[Bindable]
private function getImage(value:int):String
  {
if (value <= _ratingSelected)
return 'images/hr/applicants/star_icon.png';
else
return 'images/hr/applicants/star_icon_dis.png';
  }

如果我从此处从getImage函数中删除了Bindable标记,则图像在运行时未正确更新。请注意,_ratingSelected在这里是Bindable变量。即使我没有任何与getImage()函数相关的事件,使它成为Bindable似乎正常工作。它是否自动检测_ratingSelected变量(可绑定)中的更改更改并在运行时调用getImage函数?请启发。

感谢。

1 个答案:

答案 0 :(得分:2)

如果未在Binding标记中指定事件名称,则使用事件“propertyChange”。这意味着每次框架从文档中获取“propertyChange”事件时,它都会尝试再次调用getImage来更新图像源。

现在更新_ratingSelected的值时,会在内部调度“propertyChange”事件,然后导致图像更新。

请注意,这与getImage是否实际使用_ratingSelected生成其返回值无关。从数据绑定框架的角度来看,getImage_ratingSelected之间的唯一联系是“propertyChange”事件,当它们各自的值发生变化时,它们都声称要调度(即使getImage永远不会实际上发送它)。