在Flex中绑定值时,哪种方法更好?
答案 0 :(得分:6)
使用以下任一方法公开可绑定的公共属性被视为Flex中的最佳做法:
[Bindable] public var dataProvider:Object;
[Bindable] public function get dataProvider():Object { ... }
get / set函数对比常规公共属性更灵活。通过使用[Bindable]标记注释get函数,您仍然可以轻松地使属性可绑定。但是,您可以在“set”函数中实现一些自定义逻辑,包括设置脏标志和使属性,大小或显示列表无效。例如:
private var _dataProvider:Object;
private var dataProviderChanged:Boolean;
public function set dataProvider(value:Object):void
{
if (_dataProvider != value)
{
_dataProvider = value;
dataProviderChanged = true;
invalidateProperties();
}
}
[Bindable] public function get dataProvider():Object
{
return _dataProvider;
}
此模式在Flex框架组件中大量使用。失效模型非常干净,并且可以在您的自定义组件中实现最佳性能。
您还可以为可绑定属性指定自定义事件,以便可以从多个位置触发绑定,而不是仅通过调用setter:
[Bindable( "dataProviderChanged" )]
public function get dataProvider():Object
{
return _dataProvider;
}
public function someRandomMethod():void
{
// ...
// pretend that we just finished some processing
_dataProvider = newValue;
dispatchEvent( new Event( "dataProviderChanged" ) );
}
如果你想让属性为只读,这也很有效,这意味着它没有匹配的“set”方法。
答案 1 :(得分:0)
在大多数情况下,由于某些原因,属性更好:
1)在mxml中设置属性很容易。例如:
<mx:Button label="Bla">
,其中label是公共财产。使用setter / getter函数是不可能的,你必须从脚本中调用setLabel(“Bla”)。
2)属性与setter和getter基本相同。 我喜欢在setter变得复杂时再创建一个额外的私有方法。
public function get label():String
{
return _label;
}
public function set label(value:String):void
{
setLabel(value);
}
private function setLabel(value:String):void
{
if(value == "") {
// do something
} else {
_label = value;
remeasureComponent(); // or whatever
}
}
3)它内置于语言中,因此请使用它。
另外,object.label = "Bla"
比object.setLabel("Bla")