`
iamzealotwang
  • 浏览: 121948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex DataBinding(3)

    博客分类:
  • Flex
阅读更多

Defining binding watchers

 
Flex includes the mx.binding.utils.ChangeWatcher class that you can use to define a data-binding watcher. Typically,
a data-binding watcher invokes an event listener when a binding occurs. To set up a data-binding watcher, you use the
static watch() method of the ChangeWatcher class.

 

做了一下实验,用以检测整体数据绑定流程

整体类结构如下:

 

 

在舞台上挂载两个Panel板,建立一个ClassA并挂载到Panel2上面,ClassB为单例。

由Database对一些DataFile进行引用,并且将其中一个DataFile进行数据绑定(其余所有对象).

 

代码如下:

 

Stage

MXML语言:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/halo"
               minWidth="640"
               minHeight="480"
               backgroundColor="0x75ad44"
               initialize="onInit()">

    <fx:Script>
        <![CDATA[
            import mx.core.IFlexDisplayObject;
            import mx.managers.PopUpManager;

            private function onInit():void
            {
                DataBase.instance.init();
                ClassB.instance;
            }

            protected function onPanel1ButtonDown(event:MouseEvent):void
            {
                var panel:IFlexDisplayObject=PopUpManager.createPopUp(this, Panel1);
                panel.x=0;
                panel.y=200;
            }

            protected function onPanel2ButtonDown(event:MouseEvent):void
            {
                PopUpManager.createPopUp(this, Panel2);
            }
        ]]>
    </fx:Script>

    <s:Button x="292"
              y="34"
              label="Panel1"
              click="onPanel1ButtonDown(event)"
              textAlign="center"/>
    <s:Button x="292"
              y="67"
              label="Panel2"
              click="onPanel2ButtonDown(event)"
              textAlign="center"/>
    <s:Button x="37"
              y="384"
              label="Add Value"
              click="DataBase.instance.addDataFileValueNumber(3,5)"/>
    <s:Button x="130"
              y="385"
              label="Add ValueTwo"
              click="DataBase.instance.addDataFileValueTwo(3,5)"/>
    <s:layout>
        <s:BasicLayout/>
    </s:layout>
    <fx:Style source="DataBinding3.css"/>
</s:Application>

 

建立两个按钮,分别对DataFile的两个数据ValueOne,ValueTwo进行Add操作。

 

Panel

MXML语言:
<?xml version="1.0" encoding="utf-8"?>
<s:Panel xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/halo"
         width="200"
         height="100"
         initialize="onInit()">

    <fx:Script>
        <![CDATA[
            import mx.binding.utils.ChangeWatcher;
            import mx.managers.PopUpManager;
            private var classA:ClassA;

            private function onInit():void
            {
                classA=new ClassA();
                ChangeWatcher.watch(DataBase.instance.getDataFileByID(3), "valueOne", onBindingChange);
            }

            protected function onClose(event:MouseEvent):void
            {
                PopUpManager.removePopUp(this);
            }

            private function onBindingChange(e:Event):void
            {
                trace("Receive BindingChange on Panel2");
            }
        ]]>
    </fx:Script>

    <mx:Label x="2"
              y="1"
              text="Panel Two Value is :{DataBase.instance.getDataFileByID(3).valueOne}"
              width="194"
              height="31"/>
    <s:Button x="64"
              y="45"
              label="Close"
              click="onClose(event)"/>
    <s:layout>
        <s:BasicLayout/>
    </s:layout>
</s:Panel>

 

Panel1 和Panel2面板几乎相同,一个引用ClassA对象 一个不引用

 

ClassA:

ActionScript 3语言:
package
{
    import flash.events.Event;
   
    import mx.binding.utils.ChangeWatcher;

    public class ClassA
    {
        public function ClassA()
        {
            ChangeWatcher.watch(DataBase.instance.getDataFileByID(3),"valueOne",onBindingChange);
        }

        private function onBindingChange(e:Event):void
        {
            trace("Receive BindingChange on ClassA");
        }
    }
}

 

ClassA对绑定数据进行监听

 

DataFile:

ActionScript 3语言:
package
{
    import mx.binding.utils.ChangeWatcher;

    public class DataFile
    {
        public var _valueOne:int;
        private var _valueTwo:int;
        private var id:int;

        public function DataFile(_id:int)
        {
            this.id=_id;
        }

        public function init():void
        {
            ChangeWatcher.watch(DataBase.instance.getDataFileByID(3),"valueOne", onBindingChange);
        }

        private function onBindingChange(e:Event):void
        {
            trace("Receive BindingChange on DataFile" + id);
        }

        public function get valueOne():int
        {
            return _valueOne;
        }

        [Bindable]
        public function set valueOne(v:int):void
        {
            _valueOne=v;
        }

        public function get valueTwo():int
        {
            return _valueTwo;
        }

        [Bindable]
        public function set valueTwo(v:int):void
        {
            _valueTwo=v;
        }
    }
}

 

DataFile中含有两个元素,ValueOne和ValueTwo。整个Demo仅对ValueOne进行监听

 

DataBase:

ActionScript 3语言:
package
{
    import flash.events.Event;
    import mx.binding.utils.ChangeWatcher;

    /**
     * This class is use to store the data,
     * and test the bindable things in different class
     */
    public class DataBase
    {
        private static var _instance:DataBase;

        public static function get instance():DataBase
        {
            if (_instance == null)
            {
                _instance=new DataBase();
            }
            return _instance;
        }

        private var dataFileArray:Vector.<DataFile>;

        public function DataBase()
        {
        }

        public function init():void
        {
            dataFileArray=new Vector.<DataFile>;
            for (var i:int=0; i < 10; i++)
            {
                dataFileArray.push(new DataFile(i));
            }
            for each (var dataFile:DataFile in dataFileArray)
            {
                dataFile.init();
            }
            ChangeWatcher.watch(DataBase.instance.getDataFileByID(3), "valueOne", onBindingChange);
        }

        private function onBindingChange(e:Event):void
        {
            trace("Receive BindingChange on DataBase");
        }

        public function getDataFileByID(_id:int):DataFile
        {
            return dataFileArray[_id];
        }

        public function addDataFileValueNumber(_id:int, _value:int):void
        {
            getDataFileByID(_id).valueOne+=_value;
        }

        public function addDataFileValueTwo(_id:int, _value:int):void
        {
            getDataFileByID(_id).valueTwo+=_value;
        }

    }
}

 

初始化DataFile

 

总结:

使用ChangeWatcher.watch(***); 函数可以在任意类中响应绑定。

在实际使用中,需要 var watch:ChangeWatch = ChangeWatcher.watch(***); 在Class Destroy的使用

调用 watch.unwatch();释放监听。

在Demo中由于在watch中指定("valueOne")所以当在主面板上按 AddValueTwo时候并未触发任何事件。

 

  • 大小: 19.5 KB
1
0
分享到:
评论

相关推荐

    flex4与java结合实例

    当接收到服务器返回的数据时,Flex4的DataBinding机制能自动更新UI组件,实现数据驱动的界面。 4. 安全性:在Flex4与Java的结合中,安全性是个重要考虑因素。可以使用HTTPS加密通信,防止数据在传输过程中被窃取。...

    flex3+java 的一个留言本的例子

    同时,Flex的DataBinding机制可以自动同步界面上的数据和后台模型,极大地提高了开发效率。 在实际项目中,为了更好地管理和重用代码,通常会引入BlazeDS或LCDS这样的中间件。BlazeDS是一个开源的服务器端组件,它...

    flex做的拓扑图

    3. **LinkComponent**:表示节点之间的连接线,可能是用Shape或Graphics类绘制的,具有动态调整和动画效果。 4. **DataModel**:存储拓扑图的数据结构,可能是一个类或XML,包含了节点和连接关系的信息。 5. **...

    Flex4 做的系统拓扑图

    这些数据通过ActionScript的DataBinding机制与Flex4界面进行交互,确保用户操作界面时,后台数据的同步更新。 MyEclipse是基于Eclipse的Java EE集成开发环境,支持包括Flex在内的多种开发技术。将项目导入MyEclipse...

    flex-spring blazeds integration基本框架搭建记录

    2. 数据绑定:使用Flex的DataBinding特性,实现在Flex组件和后台数据模型之间的双向绑定。 七、异常处理与安全考虑 1. 异常处理:设置合适的错误处理机制,确保在通信过程中出现异常时能够正确反馈。 2. 安全性:...

    天气显示(flex+php)

    5. **Flex数据绑定**:在Flex端,使用DataBinding机制将接收到的数据自动绑定到相应的UI组件上,实现实时更新。例如,将温度数据绑定到Label的text属性,城市名绑定到另一Label等。 6. **用户交互**:添加事件监听...

    我参与的《云计费》项目前台Flex架构

    Flex的DataBinding允许UI组件与后台数据模型进行同步,简化了数据驱动的UI开发。 2. **模型(Model)**:存储和管理业务数据,可能是通过AMF(Action Message Format)与后端服务进行通信的数据实体。 3. **视图...

    flex 今天昨天时间曲线图统计

    此外,还会结合DataBinding技术将数据绑定到图表组件。 **图表展现**:Flex的图表组件库中包含了多种图表类型,其中“RealChart”可能是一个为时间序列数据量身定制的图表组件。这类组件可以以时间轴为基准,按照...

    Flex HtmlComponent

    - Supports Databinding - Supports Styles - Customizable function to handle unsupported browsers - Show, hide, move and size - Display HTML skinnable pop up windows in your application with layering ...

    WeiboTrends 仿TwitterTrends

    同时,Flex的DataBinding特性使得数据与UI之间的同步变得简单,开发者无需手动处理更新视图的逻辑。 项目可能还涉及了数据可视化,比如使用图表组件来展示微博趋势的变化。Flex中的Spark Chart组件库提供了各种图表...

    flex ToolTip汇总

    - 也可以使用数据绑定(`dataBinding`)将提示内容与数据模型关联,使提示内容动态更新。 5. **交互事件** - `ToolTip`类提供了如`show`和`hide`等事件,可以监听这些事件进行额外的处理,比如在提示显示时执行某些...

Global site tag (gtag.js) - Google Analytics