加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex信号量(Signal)与数据绑定(SignalBinding)初探

发布时间:2020-12-15 04:08:58 所属栏目:百科 来源:网络整理
导读:? ? ?相信大家在flex的开发过程中,经常会使用事件机制的方式传递数据,下面我介绍通过信号量Singal方式来传递数据,并通过数据绑定的方式改变控件的值。从而就实现了动态改变组件数据源了。下面将讲述这个过程。 ? ?讲述之前:大家可以查看这个网址:?http:

? ? ?相信大家在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{
Alert.show(value);
}

3.2 信号量与数据绑定说明:

var?_pm:TitleModel? = new TitleModel("minggxu8");?

? ? ?添加控件绑定

_pm.addTitleBinding( titleLabel,"text" );

? ? 改变数据

_pm.changeValue();

?改变值的同时,该控件的值同时也会改变,因为它们已经绑定在一起了。所以会同时变化。

(个人理解,以官方为准。)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读