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
分享到:
相关推荐
当接收到服务器返回的数据时,Flex4的DataBinding机制能自动更新UI组件,实现数据驱动的界面。 4. 安全性:在Flex4与Java的结合中,安全性是个重要考虑因素。可以使用HTTPS加密通信,防止数据在传输过程中被窃取。...
同时,Flex的DataBinding机制可以自动同步界面上的数据和后台模型,极大地提高了开发效率。 在实际项目中,为了更好地管理和重用代码,通常会引入BlazeDS或LCDS这样的中间件。BlazeDS是一个开源的服务器端组件,它...
3. **LinkComponent**:表示节点之间的连接线,可能是用Shape或Graphics类绘制的,具有动态调整和动画效果。 4. **DataModel**:存储拓扑图的数据结构,可能是一个类或XML,包含了节点和连接关系的信息。 5. **...
这些数据通过ActionScript的DataBinding机制与Flex4界面进行交互,确保用户操作界面时,后台数据的同步更新。 MyEclipse是基于Eclipse的Java EE集成开发环境,支持包括Flex在内的多种开发技术。将项目导入MyEclipse...
2. 数据绑定:使用Flex的DataBinding特性,实现在Flex组件和后台数据模型之间的双向绑定。 七、异常处理与安全考虑 1. 异常处理:设置合适的错误处理机制,确保在通信过程中出现异常时能够正确反馈。 2. 安全性:...
5. **Flex数据绑定**:在Flex端,使用DataBinding机制将接收到的数据自动绑定到相应的UI组件上,实现实时更新。例如,将温度数据绑定到Label的text属性,城市名绑定到另一Label等。 6. **用户交互**:添加事件监听...
Flex的DataBinding允许UI组件与后台数据模型进行同步,简化了数据驱动的UI开发。 2. **模型(Model)**:存储和管理业务数据,可能是通过AMF(Action Message Format)与后端服务进行通信的数据实体。 3. **视图...
此外,还会结合DataBinding技术将数据绑定到图表组件。 **图表展现**:Flex的图表组件库中包含了多种图表类型,其中“RealChart”可能是一个为时间序列数据量身定制的图表组件。这类组件可以以时间轴为基准,按照...
- 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 ...
同时,Flex的DataBinding特性使得数据与UI之间的同步变得简单,开发者无需手动处理更新视图的逻辑。 项目可能还涉及了数据可视化,比如使用图表组件来展示微博趋势的变化。Flex中的Spark Chart组件库提供了各种图表...
- 也可以使用数据绑定(`dataBinding`)将提示内容与数据模型关联,使提示内容动态更新。 5. **交互事件** - `ToolTip`类提供了如`show`和`hide`等事件,可以监听这些事件进行额外的处理,比如在提示显示时执行某些...