`
darrenzhu
  • 浏览: 782459 次
  • 性别: 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();
}

分享到:
评论

相关推荐

    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 第...

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

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

    actionscript3

    本书是国内第一本“面向原因式”(Why-Oriented Book)、全面系统介绍Flash ActionScript 3的书籍。全书共分为5个部分。第一部分:ActionScript 3语言基础;第二部分:ActionScript 3 面向对象编程;第三部分:...

    ActionScript 3.0开发技术大全(第一部分)

    第1篇 ActionScript3.0语言基础  第1章 ActionScript3.0概述  第2章 搭建ActionScript3.0开发环境  第3章 ActionScript3.0语法 第2篇 ActionScript3.0面向对象特性  第4章 ActionScript3.0面向对象编程  第...

    ActionScript+3.0+Cookbook+中文完整版

    fla中是与“ActionScript 3视觉编程”部分相关的内容,主要是一些fla文件和xml文件,用于讲解类绑定、组件制作等与视图紧密相关的例子。 Sample.fla用于读者编译本书文档类例子,是一个空Fla文件。 ...

    《ActionScript 3.0 语言和组件参考》中文官方版本,无错

    ActionScript 是针对 Adobe Flash Player 运行时环境的编程语言,它在 Flash 内容和应用 程序中实现了交互性、数据处理以及其它许多功能。 ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的...

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

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

    ActionScript

    第1章 揭开ActionScript的神秘面纱 第2章 Flash MX的动作面板 第3章 ActionScript编程初步 第4章 影片播放控制 第5章 控制影片剪辑 第6章 影片剪辑属性 第7章 影片剪辑方法 第8章 响应键盘 9章 输入文本和字符串...

    Flash ActionScript 3殿堂之路

    《Flash ActionScript3殿堂之路》共分5个部分。第1部分:ActionScript 3语言基础;第2部分:ActionScript 3面向对象编程;第3部分:ActionScript 3 核心类;第4部分:ActionScript 3主要的Flash Player API;第5部分...

    ActionScript基础 ActionScript基础

    ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础ActionScript基础

    Adobe Flash 中的 ActionScript 2

    Adobe Flash 中的 ActionScript 2

    ActionScript3代码规范

    ActionScript3代码规范 ActionScript3代码规范 ActionScript3代码规范

    ActionScript 3.0基础教程

    本书详细地介绍了 actionscript 3.0的基础知识,包括 actionscript 3.0语言、actionscript 3.0对象的操作方法、显示列表的使用、事件模型、加载外部素材、可视化编程以及利用声音和视频增强应用程序等方面的知识,并...

    ActionScript 3.0 语言和组件参考

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

    actionscript 3 as3 pdf

    ActionScript 3.0 是一种强大的面向对象编程语言,它标志着 Flash Player Runtime 演化过程中的一个重要阶段。设计 ActionScript 3.0 的意图是创建一种适合快速地构建效果丰富的互联网应用程序的语言,这种应用程序...

    flex中文帮助 ActionScript3.0中文帮助

    ActionScript 3.0 语言和组件参考概述Adobe Flex 2 语言参考ActionScript 3.0 语言和组件参考是适用于 Flash® Player 应用程序编程接口 (API) 的参考手册。 Adobe Flex 2 语言参考ActionScript 3.0 语言和组件...

    Flash ActionScript 3.0编程技术教程(全)

    本书全面介绍了ActionScript 3.0的基本语法、类的架构以及面向对象程序的设计理念。内容安排上既适合刚刚接触到ActionScript脚本语言的初学者,也照顾到学习过ActionScript之前版本有一定编程经验的读者。 鉴于...

    ActionScript 3设计模式

    本书是一本高级ActionScript 3.0设计模式用书。大家或许也一直没有搞明白“高级”一词的含义。高级ActionScript 3.0指的是本书并不包含API引用函数以及ActionScript 3.0的入门基础这些主题。作者假定读者已经具备...

    ActionScript 3 For Adobe Flash CS4 Professional

    ActionScript 3 For Adobe Flash CS4 Professional About this guide This guide provides a quick introduction to migrating to ActionScript 3 from ActionScript 2. It is targeted at designers and ...

Global site tag (gtag.js) - Google Analytics