Actionscript 3 commitProperties中的Bindable vs dirty标志

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 <

在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
 <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

作为记录…我喜欢装订…我一直在用它。你只需要明白:

  • 演出很成功
  • 它不遵守Flex的失效模型(即
    commitProperties
  • 它发生在全局范围内,并可能导致对象挂起
  • 如果要查看编译器生成的代码,可以添加编译器选项:
    -保持生成的actionscript=true

    第一种方法有什么问题?Flex中的绑定属性是框架最强大的功能之一。谢谢Clint。所以,对于像我这样的简单情况,我应该使用bindable,对于其他情况,则使用第二种方法。但是,究竟应该在哪里划分界限呢?换一句我之前的话,为什么绑定没有效率?如果不总是这样,那么什么时候呢?从技术上讲,它总是低效的……只是在几乎所有的情况下,效率(或缺乏效率)都是完全可以接受的。我将编辑我的答案。