如果我的.mxml文件中包含方法和公共属性,那么只要属性发生变化,我就可以执行该方法。
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
[Bindable]public var myProperty:MyType;
private function myMethod(myProperty):void
{
// Method to run every time myProperty changes
}
]]>
</mx:Script>
</mx:HBox>
在另一个.mxml文件中,我添加了这个.mxml文件,如下所示:
<viewComponents:MyViewComponent myProperty="{myVariable}" />
答案 0 :(得分:7)
由于还没有人这么说,我会提出第二种方法。
Flex Framework中的每个属性都将调度名为* property * Changed的属性。其中 property 是要更改的属性的名称。如其他人所提到的,使用get set方法实现所述属性。像这样:
private var _myProperty:MyType;
[Bindable(myPropertyChanged)]
public function get myProperty():MyType
{
return _myProperty;
}
public function set myProperty(value:MyType):void
{
_myProperty = value;
dispatchEvent(new Event('myPropertyChanged'));
}
Bindable元数据中指定的这些事件名称用于绑定目的。因此,您可以监听此myPropertyChanged事件,而不是在集合中调用您的方法:
component.addEventListener('myPropertyChanged',onMyPropertyChanged)
代码中的其他地方:
protected function onMyPropertyChanged(event:Event):void{
// do other processing
}
对于你想要完成的事情,这可能是过度的;或不。既然你没有详细说明你想要完成的事情,我不确定。
如果您的新功能以某种方式与Flex Component LifeCycle相关,例如更改显示或大小,您应该在生命周期方面执行更改;不在你的set方法中。像这样:
private var _myProperty:MyType;
private var _myPropertyChanged:Boolean = false
[Bindable('myPropertyChanged')]
public function get myProperty():MyType
{
return _myProperty;
}
public function set myProperty(value:MyType):void
{
_myProperty = value;
_myPropertyChanged = true;
invalidateProperties();
invalidateDisplayList();
invalidateSize()
invalidateSkinState(); // spark comps only
dispatchEvent(new Event('myPropertyChanged'));
}
invalidate方法将强制组件生命周期方法在下一个渲染事件期间重新运行,您可以在相关方法中使用这样的代码:
if(_myPropertyChanged == true){
_myPropertyChanged = false;
// do other processing
}
答案 1 :(得分:5)
您可以使用get
和set
访问者方法。更多详情是here。
在你的情况下,它类似于:
private var _myProperty:MyType;
public function set myProperty(value:MyType):void
{
_myProperty = value;
// he best way is to place myMethod body here
myMethod(_myProperty);
}
[Bindable]
public function get myProperty():MyType
{
return _myProperty;
}
答案 2 :(得分:4)
我就是这样做的。创建一个调用您建议的方法的setter函数:
var _mystatus:Number = 0;
function set mystatus(val:Number):void
{
_mystatus = val;
alertfunction();
}
function get mystatus():Number
{
return _mystatus;
}