Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

What are the ways to use Bindab metadata tags in Flex data binding

2025-02-24 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/02 Report--

这篇文章给大家分享的是有关Flex数据绑定中使用Bindable元数据标记的方式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

Flex数据绑定

使用Bindable元数据标记

当属性成为Flex数据绑定表达式源时,Flex在源属性发生变化时自动将源属性的值拷贝给目的属性。为了告知Flex去执行这个拷贝工作,必须用[Bindable]元数据标记将这个属性注册到Flex中,并且源属性必须发出一个事件。

[Bindable]元数据标记语法如下:

[Bindable] [Bindable(event="eventname")]

如果忽略事件名称,Flex会自动创建一个名为propertyChange,类型为PropertyChangeEvent的事件。可以在三个地方使用[Bindable]元数据标记:

1.在public类定义之前使用。

在这个地方使用[Bindable]元数据标记使得类中定义的全部public变量以及同时具有setter和getter方法的public属性能成为Flex数据绑定表达式的源。这种情况下,[Bindable]不使用任何参数,如下例所示:

[Bindable] publicclassTextAreaFontControlextendsTextArea{}

Flex编译器自动为所有public属性生成名为propertyChange,类型为PropertyChangeEvent的事件,以使这些属性可以被用于Flex数据绑定表达式的源。

如果对属性进行写操作的时候属性值保持不变,Flex不会发出事件或者更新属性,这里判断属性是否不同可以翻译为如下的检测语句:

(oldValue!==value)

这意味着,如果属性包含了一个对象引用,并且引用被更改为引用了一个不同但是等价的对象,那么绑定也会被触发。如果属性没有被改变,而它所指向的对象在内部发生了变化,那么绑定不会被触发。

注意:在publicclass定义之前使用[Bindable]元数据标记只是将绑定作用于public属性,它不会作用于private和protected属性以及那些定义在其他namespace中的属性。必须在非public属性前插入[Bindable]元数据标记,才能使之成为Flex数据绑定表达式的源。

2.在public,protected或者private属性之前使用该标记可以将这个特定的属性定义为支持Flex数据绑定。

标记可以有以下的形式:

[Bindable] publicvarfoo:String;

Flex编译器自动为那个属性产生名为propertyChange,类型为PropertyChangeEvent的事件,如果写入的属性值不变,Flex不会发出事件或者更新属性。也可以在[Bindable]元数据标记中指定事件名,如下的例子所示:

[Bindable(event="fooChanged")] publicvarfoo:String;

这种情况下,开发者要自己负责产生和发出事件,通常在类的其他方法中完成这些工作。尽管在类的级别上指定了[Bindable]标记,如果想要为事件命名,仍然可以在[Bindable]中包含指定名称的事件。

3.在由getter或者setter方法所定义的public,protected或者private属性之前使用该标记。

这种情况下,要想使用[Bindable]标记必须为属性同时定义setter和getter方法。如果只是定义了一个setter方法,那么你就创建了一个"只写"属性,这样的属性不能作为Flex数据绑定表达式的源。如果只定义getter方法,那么就创建了一个"只读"属性,把只读属性当作Flex数据绑定源而不插入[Bindable]标记,就如同使用了一个用const关键字定义的变量来作为Flex数据绑定表达式的源。(这样的绑定源只能在应用启动时触发绑定一次,以后就不会再触发)。

这个标记可以由下面的形式定义:

[Bindable] publicfunctionsetshortNames(val:Boolean):void{ ... } publicfunctiongetshortNames():Boolean{ ... }

Flex编译器自动为这个属性产生一个名为propertyChange,类型为PropertyChangeEvent的事件。如果属性值在写入的时候保持不变,Flex不会发出事件或者更新属性。为了确定属性是否变化,Flex调用getter方法来获取属性的当前值。

也可以为事件指定名称,如下例所示:

[Bindable(event="changeShortNames")] publicfunctionsetshortNames(val:Boolean):void{ ... //Createanddispatchevent. dispatchEvent(newEvent("changeShortNames")); } //Getmethod. publicfunctiongetshortNames():Boolean{ ... }

这种情况下,开发者要负责生成和发出事件。通常是在setter方法中完成这个工作。

并且Flex不会检查旧值和新值是否不同。尽管在类的级别上指定了[Bindable]标记,如果想要为事件命名,仍然可以在[Bindable]中包含指定名称的事件。

下面的代码使以变量形式定义的maxFontSize和minFontSize属性可以作为Flex数据绑定的源:

//Definepublicvarsfortrackingfontsize. [Bindable] publicvarmaxFontSize:Number=15; [Bindable] publicvarminFontSize:Number=5;

在下面的例子中,使setter和getter方法形式定义的public属性成为Flex数据绑定的源。

[Bindable]元数据标记中引入了属性变化时由setter方法发出的事件:

//Defineprivatevariable. privatevar_maxFontSize:Number=15; [Bindable(event="maxFontSizeChanged")] //Definepublicgettermethod. publicfunctiongetmaxFontSize():Number{ return_maxFontSize; } //Definepublicsettermethod. publicfunctionsetmaxFontSize(value:Number):void{ if(value

◆使用可绑定属性链进行工作

当指定一个属性作为Flex数据绑定表达式的源时,Flex不仅监控这个属性的变化,也会监控这个由这个属性作为开始点的属性链的变化。整个属性链,包括源属性,被称为"可绑定的属性链"。在下面的例子中,firstName.text是一个可绑定的属性链:

开发者可以使用很长的属性链,如下例所示:

只有当text属性是可绑定的,Flex数据绑定机制才能检查text属性的变化。但是,如果在运行时,想要向属性链中的部分属性赋予新值,那么属性链中的每个属性都必须是可绑定的,才能使Flex数据绑定机制起作用。否则,在运行时更改user,name或者firstName属性会导致Flex数据绑定机制无法检查text属性的变化。

在使用BindingUtils.bindProperty()或者BindingUtils.bindSetter()方法时,可以将可绑定的属性链作为方法的参数,例如,bindProperty()方法有以下的声明:

publicstaticfunctionbindProperty(site:Object,prop:String,host:Object,chain:Object,commitOnly:Boolean=false):ChangeWatcherHost和chain属性指定了Flex数据绑定表达式的源。使用bindProperty()方法可以定义一个Flex数据绑定表达式,如下:

bindProperty(myText,'text',user,["name","firstName","text"]);

这个例子中,["name","firstName","text"]定义了相对于user对象的可绑定属性链。注意,在本例中,user不是可绑定属性链的一部分。

在MXMLFlex数据绑定表达式中,可绑定属性连总是相对于this。因此,要想定义一个同上面的MXML等价的Flex数据绑定表达式,应按如下例子使用bindProperty()方法:

bindProperty(myText,'text',this,["user","name","firstName","text"]);

感谢各位的阅读!关于"Flex数据绑定中使用Bindable元数据标记的方式有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report