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

14.8.绑定到一个一般的对象

2023-07-22 12:39:03
字体:
来源:转载
供稿:网友
14.8.1. 问题
我想通过使用一个顶层的对象实例做为源来绑定到一个属性上。
14.8.2. 解决办法
使用类mx.utils.ObjectProxy 来在对象与分发绑定的事件间进行交换。
14.8.3. 讨论
直接创建一个绑定到一个一般的对象上只会在目标对象初始化的时候引入一个更新操作。为了源对象的属性值得到更新的时候,能同时更新目标对象的值,需要使用业ObjectProxy。创建一个ObjectProxy 对象,需要传递该对象到构造函数中。例如:
+展开
-ActionScript
var obj:Object = {name:'Tom Waits', album:'Rain Dogs',genre:'Rock'};
var proxy:ObjectProxy = new ObjectProxy( obj );

对象的属性值的修改会被ObjectProxy 进行处理,当更新操作发生时,ObjectProxy 对象会分发一个propertyChange 事件。该propertyChange 事件是默认绑定分发的事件。当默认的事件被分发时,源属性的值就会被复制到目标对象的属性。在接下来的例子中传递了一个一般的对象到一个类ObjectProxy 的实例的构造函数:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:Script>
<![CDATA[
import mx.utils.ObjectProxy;
private var obj:Object = {name:'Tom Waits', album:'Rain Dogs', genre:'Rock'};
[Bindable]
private var proxy:ObjectProxy = new ObjectProxy( obj );
private function clickHandler():void
{
proxy.name = nameField.text;
proxy.album = albumField.text;
proxy.genre = genreField.text;
}

]]>
</mx:Script>
<mx:Form>
<mx:FormItem label="Name:">
<mx:TextInput id="nameField" />
</mx:FormItem>
<mx:FormItem label="Album:">
<mx:TextInput id="albumField" />
</mx:FormItem>
<mx:FormItem label="Genre:">
<mx:TextInput id="genreField" />
</mx:FormItem>
<mx:FormItem label="Submit Changes">
<mx:Button label="okclick="clickHandler();" />
</mx:FormItem>
</mx:Form>
<mx:HRule width="100%" />
<mx:Form>
<mx:FormItem label="Name:">
<mx:Text text="{proxy.name}" />
</mx:FormItem>
<mx:FormItem label="Album:">
<mx:Text text="{proxy.album}" />
</mx:FormItem>
<mx:FormItem label="Genre:">
<mx:Text text="{proxy.genre}" />
</mx:FormItem>
</mx:Form>
</mx:Application>

在这个例子中,当更新被提交后,对象ObjectProxy 的属性被修改,同时更改也被映射到绑定到该对象的制件中。只有当属性预定义在一个代理的对象中,没有任何限制的进行更新,同量也可以为这些语句定义绑定的语句。

你应当创建一个自定义的类,同时使用让绑定的属性为共有,来取代使用一般的对象。然而,当在你的应用程序架构中这是不可能的时候,使用ObjectProxy 来处理是受益不少的。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表