好吧,我有一个组合框,我把他的selectedItem属性绑定到一个值对象对象,就像这样
<fx:Binding source="styles_cb.selectedItem.toString()" destination="_uniform.style"/>
<fx:Declarations>
<fx:XML id="config_xml" xmlns="" source="config.xml" />
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:ComboBox x="66.15" y="63.85" editable="false" id="styles_cb" dataProvider="{config_xml.styles.style}" />
值对象是一个带有一些setter和getter的自定义类,我想根据组合的selectedItem的值设置一个属性,所以在value对象里面我有这样的东西
[Bindable]
public function set style(value:String):void
{
_style = value;
trace(value);
}
我的问题是,每次我更改组合框选择实际上改变了值对象的样式属性时它会做3次,如果我跟踪setter的值它实际上做了3次跟踪,为什么?我怎么能避免这个?我做错了什么?或者有更好的方法,请帮助,谢谢你的帮助
答案 0 :(得分:1)
数据绑定表达式的爆发频率超过预期。我不知道确切的原因。如果这会导致您的应用出现问题,请不要将源直接绑定到目标,而是使用失效。绑定源以设置标志stylesSelectedItemChanged并调用invalidateProperties()。然后重写commitProperties()并在commitProperties()中,检查stylesSelectedItemChanged是否为true,如果是,则将新值传播到目标并将标志重置为false。一定要调用super.commitProperties(),否则很多东西都会破坏。
失效在Flex框架中非常常见,每个组件都在内部使用它,并且它对这些问题有很大帮助。
答案 1 :(得分:1)
[Bindable]
[RemoteClass(alias='Uniform')]
public class Uniform extends Object implements IEventDispatcher
然而,当我试图在我在文档中发现的事件中发送一个事件时,我必须添加这样的事件名称
[Bindable("styleChanged")]
public function get style():String
{
return _style;
}
public function set style(value:String):void
{
_style = value;
dispatchEvent(new Event("styleChanged"));
}
现在我发现这样做,用双重绑定标记属性,这让我多次设置属性,hugg!,但是现在我知道我可以避免使用第二个[Bindable]并且仍然事件得到调度,所以现在我想知道为什么我需要首先使用[Bindable(“styleChanged”)]如果我仍然可以只用[Bindable]和调度方法来调度事件?,很奇怪
希望对某人有所帮助