首页 > 设计 > WEB开发 > 正文

14.2.绑定到一个函数

2023-07-22 12:39:07
字体:
来源:转载
供稿:网友
14.2.1. 问题
我想使用一个函数做为数据源绑定到一个属性的值上。
14.2.2. 解决办法
在一个组件的定义时使用花括号进行绑定,传递一个绑定的属性或者一个基于绑定事件从而能被调用的函数做为函数的参数值来实现。
14.2.3. 讨论
通过源数据来对目标数据进行更新和同步,是一种快速且简便的方法。当使用属性值做为绑定的数据源时,那么只能绑定在同一种数据类型中。但是当你想使用另外一种类型的数据绑定到另外一种类型中时,使用函数进行绑定则是最适合的了。

你可以使用两种方式来使用函数进行绑定:传递一个已经绑定的属性做为参数进行传递或者定义一个可以绑定的函数做为属性值。

接下来的例子通过传递了一个绑定的源属性值到函数中来更新目标对象的值:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:CurrencyFormatter id="formatterprecision="2" />
<mx:Form>
<mx:FormItem label="Enter the withdrawl amount:">
<mx:TextInput id="amtInput" />
</mx:FormItem>
<mx:FormItem label="Formatted amount:">
<mx:TextInput editable="false"
restrict="1234567890"
text="{formatter.format( amtInput.text )}" />

</mx:FormItem>
</mx:Form>
</mx:Application>

第一个TextInput 的实例是用于格式化第二个TextInput 的值,通过<mx:CurrencyFormatter>来进行格式化。通过绑定,当amtInput 的值更新的同时,格式化的函数也同时得到调用。传递一个绑定的属性做为参数给一个函数是一种简洁的方法来保证一对一的数据同步是可靠的。

除了传递一个可以绑定的值做为参数来传递外,还可以使用[Binding]标签去定义一个函数,使其变得可以绑定。当定义的事件类型被捕获时,函数也被调用同时也强制去更新任意绑定的属性。细想下面这个例子:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="verticalcreationComplete="initHandler();">
<mx:Script>
<![CDATA[
private var _fruit:String;
private var _fruits:Array = ["Apple""Banana""Orange"];
private function initHandler():void
{
fruitCB.dataProvider = _fruits;
}
[Bindable(event="fruitChanged")]
private function isOrangeChosen():Boolean{return _fruit == "Orange";}
public function get fruit():String{return _fruit;}
public function set fruit( str:String ):void{
_fruit = str;
dispatchEvent( new Event( "fruitChanged" ) );
}

]]>
</mx:Script>
<mx:Label text="select a fruit:" />
<mx:HBox>
<mx:ComboBox id="fruitCB"
change="{fruit = fruitCB.selectedLabel}" />

<mx:Button label="Eat the orange."
enabled="{isOrangeChosen()}" />

</mx:HBox>
</mx:Application>

在这个例子中,Button 实例中的enabled 属性被绑定到一个布尔型返回值的isOrangeChosen方法。该函数的返回值基于_fruit 的值,当ComboBox 被选择时,该值也同时进行了更新。

所以当fruit 值更新时都会分发fruitChanged 事件同时也调用了isOrangeChosen 访求,同时也强制的更新了Button 实例中的enabled 属性,从而使enabled 变得是否可以使用。

本质上,button 实例的是否可用依赖于ComboBox 控制所选择的值。在不同的数据源类型中进行数据绑定,使用函数来进行绑定是最快捷的方法。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表