在进行绑定的时候需要注意一点为了降低复杂度来提高效率,在复杂关系的[Bindable]会被忽略。
下面我主要说一下[Bindable]绑定和[Bindable("eventname")]绑定的区别。
as代码:
- //先说一下[Bindable]这个绑定
-
- private
var _text:String = ""; -
- [Bindable]
- public
function get text():String { -
trace("执行了get text方法"); -
return _text; - }
-
- public
function set text(value:String):void { -
if(value) { -
_text = value; -
trace("_text属性值改变了"); -
} - }
-
- //这样的绑定在编译的时候编译器会自己判断匹配那些属性之间需要建立绑定关系,
- //如果一旦绑定关系比较复杂的话效率就会下降,而且有些复杂关系的绑定会被忽略,
- //这里我推荐使用自定义事件来进行绑定。
-
- //下来说一下[Bindable(eventname)]自定义事件绑定
-
- private
var _text:String = ""; -
- [Bindable(event
= "textChanged")] - public
function get text():String { -
trace("执行了get text方法"); -
return _text; - }
-
- public
function set text(value:String):void { -
if(value) { -
_text = value; -
trace("_text属性值改变了"); -
//这里需要注意一下必须手动dispatch 一个event,这个就是为了触发一下绑定text -
dispatchEvent(new Event("textChanged")); -
} - }
为什么自定义事件的绑定效率会比前者好呢?因为在编译器编译的时候会明确的知道这个属性绑定eventname这个事件,一旦eventname这个事件分发出来了会立即查找对应这个事件的属性或者方法随之调用,
这也说明了为什么[Bindable]这中方式的绑定不用自己dispatch一个event,因为这些判断和分发事件和什么时候分发事件都是flex帮我们处理了(注意:如果属性值的改变与原来相同,flex并不传递这个事件或更新属性,
而自定义事件的绑定只要触发分发了事件就会进行绑定属性或者方法的调用)。