Flex信号量(Signal)与数据绑定(SignalBinding)初探
? ? ?相信大家在flex的开发过程中,经常会使用事件机制的方式传递数据,下面我介绍通过信号量Singal方式来传递数据,并通过数据绑定的方式改变控件的值。从而就实现了动态改变组件数据源了。下面将讲述这个过程。 ? ?讲述之前:大家可以查看这个网址:?http://www.ericfeminella.com/blog/2010/03/22/as3-signals-simulated-data-binding/, 以获得更详细的内容。 ? ?下面是我写的一个简单的例子。 ??SingalFlexDemo.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/mx" minWidth="955" minHeight="600" initialize ="init();" > <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import com.singal.app.TitleModel; private var _pm:TitleModel = null; private function init() : void { _pm = new TitleModel("minggxu8"); // Add binding between the Model's 'title' // property and the views 'titleLabel.text' // property. Assignments to "title" will now // be reflected in 'titleLabel.text' _pm.addTitleBinding( titleLabel,"text" ); } protected function changeBtn_clickHandler(event:MouseEvent):void { // TODO Auto-generated method stub //_pm = new TitleModel("minggxu9"); _pm.changeValue(); } ]]> </fx:Script> <s:Label id="titleLabel" text="mingg"/> <s:Button id="changeBtn" x="0" y="44" label="ClickMe" click="changeBtn_clickHandler(event)"/> </s:Application> 2.as处理类,如下所示 package com.singal.app { import com.ericfeminella.support.signals.binding.SignalBinding; import com.ericfeminella.support.signals.binding.SignalDataBinding; import mx.controls.Alert; import org.osflash.signals.Signal; public class TitleModel { private var _bindings:SignalDataBinding = null; private var _singalBinding:SignalBinding; private var _titleChanged:Signal = null; private var _title:String = null; public function TitleModel(value:String){ _bindings = new SignalDataBinding(true,true); _titleChanged = new Signal(String); _titleChanged.add(titleChangeListener); this.title = value; } public function titleChangeListener(value:String):void{ Alert.show(value); } public function get title() : String { return _title; } public function set title(value:String) : void { _title = value; _titleChanged.dispatch( value ); } public function changeValue():void{ this.title = "Message " + Math.random() * 1000; } // Model class provides an API for property specific // bindings while not exposing the underlying binding // mechanism,thus allowing the data binding facility // to be changed transparent to that of a client's // implementation. public function addTitleBinding(host:*,property:*):void { _bindings.addBindableListener(_titleChanged,host,property); } } } 3.简单说明 3.1信号号说明: var _titleChanged:Signal ?= ?new Signal(String); 发送信号 _titleChanged.dispatch( value ); 接收信号 _titleChanged.add(titleChangeListener); ? public function titleChangeListener(value:String):void{ 3.2 信号量与数据绑定说明: var?_pm:TitleModel? = new TitleModel("minggxu8");? ? ? ?添加控件绑定 _pm.addTitleBinding( titleLabel,"text" ); ? ? 改变数据 _pm.changeValue(); ?改变值的同时,该控件的值同时也会改变,因为它们已经绑定在一起了。所以会同时变化。 (个人理解,以官方为准。) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |