`
darrenzhu
  • 浏览: 804396 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ActionScript遍历绑定(BindProperty,BindSetter,ChangeWatcher)

阅读更多
注意: 为防止内存益处,记得调用watcherInstance.unwatch();

在MXML标签中很容易将一个组件的某个属性绑定到某个变量上,
如<mx:TextInput text={person.name}>,其中person定义为bindable。
但是如果不用mxml标签,而只在actionscipt代码里面如何实现类似的绑定呢,即如何将一个变量绑定到另一个变量上,当原变量发生变化时,Flex自动将原变量的值拷贝到目标变量上,当然你可以说自己写代码赋值,但这不是绑定,下面要讨论的是自动绑定相关的内容。

在ActionScript中,使用mx.binding.utils.BindingUtil类完成数据绑定。BindingUtil提供了两个静态方法分别完成绑定属性(bindProperty方法)和绑定方法(bindSetter方法)。

bindProperty()
方法签名
public static function bindProperty(site:Object, prop:String, host:Object, chain:Object, commitOnly:Boolean = false):ChangeWatcher

bindProperty把对象host的属性或属性链的值(由chain参数说明)绑定到对象site的公共属性prop上。更准确地说,Flex将监控host对象中由chain参数声明的公共属性或属性链,当这些属性发生变化时,将会复制新值到site对象的prop属性上。

bindSetter()方法
方法签名

public static function bindSetter(setter:Function, host:Object, chain:Object, commitOnly:Boolean = false):ChangeWatcher


bindSetter()与bindProperty()方法类似,不同的是把对象host的属性或属性链的值(由chain参数说明)传递给setter方法,由setter方法返回最终结果。setter()方法事实上就与绑定相关的事件侦听器方法。bindSetter()方法提供了更多的空间,开发者能够在绑定发生时进一步的处理数据,而不仅仅是单纯的绑定属性。

ChangeWatcher类

bindProperty()方法和bindSetter()都返回ChangeWatcher类实例。类如其名,mx.binding.utils.ChangeWatcher类负责监控绑定数据源的属性或属性链,当它们发生变化时获取通知,调用事件侦听器。关于ChangeWatcher类的具体说明请参考"ActionScript 3.0语言参考"。

在代码13-9中,应用初始化时调用initBinding()方法绑定了txtSrc.text(源)和txtDest.text(目标),也获取了该绑定的ChangeWaatcher实例cw。cw.setHandler方法修改了绑定事件发生后的侦听器方法,也就是说我们用自己的watcherListner()方法替换了bindProperty()默认的事件处理方法。

watcherListner()从cw.getValue()获取所监控属性或属性链的更新数据,并复制到目标对象(txtDest.text)上。一切都与绑定的默认行为一样。只不过我们埋下了一个圣诞彩蛋,如果txtSrc.text的值为"unbind"的时候,就利用cw.unwatch()解除绑定。



代码13-9:ChangeWatcher类的样例
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" creationComplete="initBinding()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.binding.utils.*;
private var cw:ChangeWatcher;
private function initBinding():void{cw=BindingUtils.bindProperty(txtDest,"text",txtSrc,"text");
cw.setHandler(watcherListner);}
private function watcherListner(event:Event):void{
if(txtSrc.text=="unbind"){
txtDest.text=cw.getValue().toString();
cw.unwatch();}
else{
txtDest.text=cw.getValue().toString();}}]]></mx:Script>

<mx:Form><mx:FormItem label="数据源">
<mx:TextInput id="txtSrc"/>
</mx:FormItem>
<mx:FormItem label="绑定目标">
<mx:TextInput id="txtDest"/>
</mx:FormItem>
</mx:Form>
</mx:Application>


该样例的运行结果如图13-3所示,在"数据源"中输入unbind后,绑定关系就被解除了。

属性链

数据绑定中很重要的一环就是指定监听哪些数据源。Flex不仅可以监控单一的属性,也能够监控属性链。

在下面这个例子中,属性链为book.name,属性链中的任何一环发生变化,都会调度绑定的事件侦听器方法。
BindingUtils.bindProperty(txtDest,"text",,this,["book","name"]);

使用MXML也能够达到同样的目的:

<mx:Text id="txtDest" text="{book.name }"/>





案例
package {

    class Model {
        //i shall leave the constructor to you

        [Bindable]
        public var totalItems:Number;

    }
}

public function init():void{

//this is useful if you want to unwatch or stop detecting changes to this variable
//ofcourse init function has to be called
model = new Model();
watcherInstance = ChangeWatcher.watch(model,["totalItems"],itemsChanged);

}

public function itemsChanged(event:PropertyChangeEvent):void{
//this function is called as soon as value of totalItem changes.
//if you want to stop watching this variable.
watcherInstance.unwatch();
}

分享到:
评论

相关推荐

    AS3遍历文件夹

    在ActionScript 3(AS3)中,遍历文件夹是一项基本操作,它允许开发者访问用户的文件系统,读取或处理指定目录中的文件和子文件夹。这项技术在开发涉及文件交互的应用,如图片浏览器、文件管理器或者数据导入导出...

    Flex数据绑定专题

    3. **ActionScript中的`BindingUtils`方法**:这种方式允许在运行时动态地创建数据绑定,适用于需要根据程序运行状态动态调整绑定逻辑的情况。例如: ```actionscript BindingUtils.bindProperty(myText, "text", ...

    ActionScript 3.0 API文档(CHM+HTML最新中文完整)

    《ActionScript 3.0 语言和组件参考》概述 《ActionScript 3.0 语言参考》是 Flash® Player 和 Adobe AIR™ 应用程序编程接口 (API) 的参考手册。 此版本包括支持 Adobe AIR 运行时环境的新 ActionScript 类、...

    ActionScript开发技术大全

    第1篇ActionScript3.0语言基础 第1章ActionScript3.0概述 2 1.1ActionScript概述 2 1.1.1ActionScript环境 2 1.1.2ActionScript3.0特性 3 1.1.3ActionScript3.0代码组织 5 1.2ActionScript3.0API概览 5 1.3小结 8 第...

    flash actionscript 2.0 语言参考,中文,清晰,pdf

    《Flash ActionScript 2.0 语言参考》是学习和掌握Flash编程不可或缺的资源,尤其对于初学者和希望深入理解ActionScript的开发者来说,它提供了详尽的语法和功能介绍。ActionScript是Adobe Flash平台上用于创建交互...

    ActionScript菜鸟基础终极教程

    ActionScript 基础知识点总结 ActionScript 是 Flash 内置的编程语言,用它为动画编程,可以实现各种动画特效、对影片的良好控制、强大的人机交互以及与网络服务器的交互功能。ActionScript 是一门吸收了 C++、Java...

    Flash ActionScript3.0教程示例(从入门到精通).rar

    《Flash ActionScript3.0教程示例(从入门到精通)》是一本全面解析ActionScript3.0编程语言在Flash平台上的应用的教程。ActionScript3.0是Adobe Flash Professional中的核心编程语言,用于创建交互式动画、游戏、富...

    ActionScript3.0 Game Programing中文版

    《ActionScript3.0 Game Programming》是一本专为游戏开发者设计的权威教程,中文版的出版使得更多中国读者能够深入理解和掌握ActionScript3.0在游戏开发中的应用。这本书不仅覆盖了ActionScript的基础语法和面向...

    ActionScript+3.0+语言和组件参考

    2. 类型优化:静态类型和早期绑定使得ActionScript 3.0比2.0更快,尤其在处理大量数据或复杂计算时。 五、ActionScript 3.0 应用场景 1. 网页游戏:ActionScript 3.0是开发互动游戏的常用工具,利用其动画控制和...

    ACTIONSCRIPT 3.0 组件中文版

    5. **数据绑定**:ACTIONSCRIPT 3.0组件支持数据绑定,这意味着组件的属性可以直接与数据源关联,当数据源发生变化时,组件会自动更新。这对于创建动态和响应式的用户界面非常有用。 6. **自定义组件**:如果你需要...

    flex数据绑定

    在Flex中,数据绑定是通过MXML或ActionScript来实现的。下面将详细介绍这一关键知识点: 1. MXML数据绑定: 在MXML中,我们可以通过`{}`符号来声明数据绑定。例如,一个`Label`组件的`text`属性可以绑定到某个变量...

    ActionScript基础教程,是学习actionscript的入门级教程

    ### ActionScript基础教程知识点解析 #### 一、ActionScript概览与基本语法 ActionScript是一种强大的脚本语言,主要用于Adobe Flash平台,使开发者能够创建动态交互式内容、游戏和应用程序。ActionScript的发展...

    ActionScript 3.0动态绘制正弦曲线(附源码)

    ActionScript 3.0是Adobe Flash Professional和Flex SDK中用于创建富互联网应用程序(RIA)的主要编程语言。在“ActionScript 3.0动态绘制正弦曲线”这个项目中,开发者利用了AS3的强大功能来创建可视化图形,特别是...

    ActionScript

    ActionScript是一种基于ECMAScript(JavaScript的标准化版本)的编程语言,主要被应用于Adobe Flash平台,用于创建交互式内容、富互联网应用程序(RIA)以及动画。在“ActionScript开发技术大全”这个主题中,我们...

    绑定也疯狂 第二版

    3. 在MXML中直接支持绑定,使得开发者能够在高级别上操作,甚至不需要编写任何ActionScript代码就能完成数据绑定,这在开发中大大简化了代码量。 虽然绑定机制提供了便利和效率,但Flex框架中的绑定机制并不限制...

    Adobe Flash 中的 ActionScript 2

    ActionScript 2.0 是 Adobe Flash 平台中用于创建交互式内容的主要脚本语言。在 Flash 中,ActionScript 允许开发者编写控制动画、处理用户输入、与服务器通信等功能的代码。下面是关于 ActionScript 2.0 中变量、...

    Actionscript中文帮助文档

    ActionScript是一种基于ECMAScript规范的编程语言,主要用于开发Adobe Flash平台上的交互式内容,如网页游戏、动画和应用程序。这个“Actionscript中文帮助文档”是开发者在学习和使用ActionScript 3.0时的重要参考...

    Flash课件ActionScript3.0

    例如,使用for循环遍历数组: ``` for (var i:uint = 0; i ; i++) { trace(array[i]); } ``` 3. 条件语句:AS3.0支持if...else、switch等条件判断。如: ``` if (score &gt; 90) { trace("优秀"); } else if ...

    spring actionscript 入门例子

    Spring ActionScript 是一个开源框架,它将 Spring 框架的核心概念和功能带入了 Adobe Flex 和 ActionScript 开发环境中。这个入门例子旨在帮助初学者理解如何在 Flex 或 ActionScript 项目中应用 Spring ...

    actionscript3.0开发的进度显示条项目

    5. **数据绑定**:AS3中的数据绑定允许UI元素(如进度条)自动反映其关联数据的变化。这可以通过使用`Binding`类或者自定义的观察者模式来实现。 6. **Tween 动画**:为了使进度条的移动更流畅,开发者可能会使用...

Global site tag (gtag.js) - Google Analytics