Actionscript 3 commitProperties中的Bindable vs dirty标志
在Flex中,将属性绑定到组件的最佳方式是什么 假设我必须更新TextArea的文本字段。我们可以通过两种方式来实现: 1. AS3:Actionscript 3 commitProperties中的Bindable vs dirty标志,actionscript-3,apache-flex,flex3,Actionscript 3,Apache Flex,Flex3,在Flex中,将属性绑定到组件的最佳方式是什么 假设我必须更新TextArea的文本字段。我们可以通过两种方式来实现: 1. AS3: [Bindable] private var myText:String; //setters getters <mx:TextArea id="description" text="{myText}"/> MXML: [Bindable] private var myText:String; //setters getters <
[Bindable]
private var myText:String;
//setters getters
<mx:TextArea id="description" text="{myText}"/>
MXML:
[Bindable]
private var myText:String;
//setters getters
<mx:TextArea id="description" text="{myText}"/>
MXML
<mx:TextArea id="description"/>
好的,第二种方法是干净的,但是有很多代码和额外的变量(脏标志)。但我不确定第一种方法,因为我认为Bindable标记对于性能影响不是首选的
有人有什么想法吗
提前感谢。在您的轻量级示例中,答案是……没有区别。但这只是因为我知道
TextInput.text
属性使用第二种方法和commitProperties
如果将TextInput.text属性设置1000次,它将只绘制一次
并非所有代码都以这种方式运行,即使框架规定了它……它不会强制执行它,有时当您使用绑定设置属性时,它可以启动简单属性集后面的许多其他方法,并且不使用commitProperties
和invalidation来批处理更新
此外,编译器为绑定生成的代码效率不高。如果你有一个移动项目,我会避免绑定
此外,您没有绑定到对象和属性(即myObject.myText
),而是绑定到一个简单的字符串。这就是绑定有用的地方。在本例中,您的示例失败,当myText
属性更改时,需要从myObject
调度自定义事件
绑定总是低效的,因为生成的代码很冗长,不像回调或使用无效化那么简单。也就是说,从性能的角度来看,使用绑定代替编写一堆代码来完成完全相同的事情几乎总是可以接受的
另一个问题是绑定本质上也是静态的。换句话说,它们存在于全局范围内,并导致用户界面元素粘滞,而不是被垃圾收集。一个很好的例子是绑定到回收的itemRenderer中的data属性。因此,在项目呈现器中使用数据绑定总是一个坏主意。您应该覆盖设置数据(v:Object):void
和/或使用commitProperties
作为记录…我喜欢装订…我一直在用它。你只需要明白:
commitProperties
)-保持生成的actionscript=true
第一种方法有什么问题?Flex中的绑定属性是框架最强大的功能之一。谢谢Clint。所以,对于像我这样的简单情况,我应该使用bindable,对于其他情况,则使用第二种方法。但是,究竟应该在哪里划分界限呢?换一句我之前的话,为什么绑定没有效率?如果不总是这样,那么什么时候呢?从技术上讲,它总是低效的……只是在几乎所有的情况下,效率(或缺乏效率)都是完全可以接受的。我将编辑我的答案。