1. Implicit Data Binding & Explicit Data Binding
//The main difference between implicit and explicit is that implicit data binding is //done at run time while explicit data binding is done at compile time
1). Implicit Data Binding:
Eg1.
<?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" initialize="init(15)" minWidth="955" minHeight="600"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import components.ClassA; import mx.controls.Alert; import mx.events.PropertyChangeEvent; private var classA:ClassA = new ClassA(); private function init(num:Number):void { classA.addEventListener("propertyChange", handler); classA.value = num; } private function handler(event:PropertyChangeEvent):void { Alert.show("New value: " + event.newValue + ", Old value: " + event.oldValue); } ]]> </fx:Script> </s:Application>
package components { import mx.core.UIComponent; public class ClassA extends UIComponent { private var _value:Number; [Bindable] public function get value():Number { return _value; } public function set value(num:Number):void { _value = num; } } }
Eg2.
<?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" initialize="init(23);" minWidth="955" minHeight="600"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Metadata> [Event(name="valueChanged", type="event.ValueChangedEvent")] </fx:Metadata> <fx:Script> <![CDATA[ import components.ClassB; import event.ValueChangedEvent; import mx.controls.Alert; private var classB:ClassB = new ClassB(); private function init(num:Number):void { classB.addEventListener("valueChanged", handler); classB.val = num; } private function handler(e:ValueChangedEvent):void { Alert.show("New value: " + e.expVal + ", Old value: " + e.preVal); } ]]> </fx:Script> </s:Application>
package components { import event.ValueChangedEvent; import flash.events.Event; import mx.core.UIComponent; public class ClassB extends UIComponent { private var _val:Number; [Bindable(event="valueChanged")] public function get val():Number { return _val; } public function set val(num:Number):void { var eventObj:ValueChangedEvent = new ValueChangedEvent("valueChanged", new String(_val), new String(num)); _val = num; dispatchEvent(eventObj); } } }
package event { import flash.events.Event; public class ValueChangedEvent extends Event { public var preVal:String; public var expVal:String; public function ValueChangedEvent(type:String, preVal:String, expVal:String) { super(type); this.preVal = preVal; this.expVal = expVal; } } }
Comment:
1) In Eg1: Once a variable is changed, you'll get notification (system will dispatch PropertyChange event automatically). The [Bindable] is compiled as [Bindable(event="propertyChange")].
2) In Eg2: We dispatch our custom event every time property changed and catch our custom event instead of the event dispatched by system.
2). Explicit Data Binding
1. Reasons why we use Explicit Data Binding:
1) You want to cast an object type with another object type.
2) You want to avoid compile-time errors in a mismatch between objects.
3) You are dealing with forms where all the properties are of type String, but they need to be
converted to another format.
Eg.
<s:Button width="50" label="{num.toString()}" click="num++" />
var com:UIComponent = object as UIComponent
trace(Number("2"));
P.S
1. Flex SDK 3.4 and up brings a new data type called Vector, which we encourage using when you need to create a collection of a data type. But it enforces every element in it must be the same type. Just like Generic in JAVA.
Eg.
<?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" creationComplete="initApp(event);" minWidth="955" minHeight="600"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ import vo.Student; private var studentList:Vector.<Student>; private function initApp(event:Event):void { var student1:Student = new Student(1, "Davy", "male"); var student2:Student = new Student(2, "Caly", "female"); studentList = Vector.<Student>([student1, student2]); } ]]> </fx:Script> </s:Application>
package vo { public class Student { public var id:int; public var name:String; public var gender:String; public function Student(id:int, name:String, gender:String) { this.id = id; this.name = name; this.gender = gender; } } }
相关推荐
Android Data Binding RecyclerView Using Recyclerview with the new Android Data Binding framework. ... dataBinding { enabled = true } Modify your layout Remember to use your classes and packages ;-).
DataBinding-ktx使声明数据绑定变得容易。 在这里。 数据绑定中的问题 忘记在DataBinding中调用setLifecycleOwner 。 在Activity和Fragment中声明binding变量的方式有所不同。 在活动中,可以使用by lazy声明...
DataBinding RecyclerViewAdapter 中文版 README Free from writing adapters! NO MORE CLASSES! Super simple RecyclerView adapter using Data Binding Technology, no longer need to write any adapter! You don...
:dna:Android DataBinding套件,用于通知MVVM架构上从Model层到UI层的数据更改。 Bindables:dna:Android DataBinding工具包,用于通知从模型层到UI层的数据更改。 该库提供了DataBinding的基类(BindingActivity,...
赠送jar包:cxf-rt-databinding-jaxb-3.0.1.jar; 赠送原API文档:cxf-rt-databinding-jaxb-3.0.1-javadoc.jar; 赠送源代码:cxf-rt-databinding-jaxb-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-rt-...
:dna: Android DataBinding工具包,用于通知数据从模型层到UI层的更改。 该库提供了DataBinding的基类(BindingActivity,BindingFragment,BindingViewModel), 并支持在没有可观察字段和LiveData的情况下通知...
Tarea2RecyclerView:使用DataBinding和callBack的Recycler视图
即时天气 :sun_behind_cloud: 使用 MVVM 模式、Retrofit2、Dagger2、LiveData、ViewModel、Coroutines、Room、Navigation Components、Data Binding 和来自一些其他库实现的 Android 天气应用程序。...
高仿"掘金Android App": databinding kotlin rx 的优雅实践
关于Android的DataBinding技术分享文档,是私人文档。
Android Databinding 与 RecyclerView 完美结合。Android Databinding 与 RecyclerView 完美结合。
DataBinding在recycleview中的使用,DataBinding在recycleview中的使用
DataBinding的使用与原理
DataBinding中ViewStub例子
【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 ) https://hanshuliang.blog.csdn.net/article/details/129773150 一、...
关于Jquery扩张库DataBinding的一个更新的版本,比之前的版本增加了不少了功能
完整的android databinding例子, 里面包括了各种输入ui,switch, imageview, button事件, recyclerview的绑定应用及双向绑定. 对于初学者来讲非常简单易懂, 具体说明 ...
Android数据绑定扩展 一组启用了Android数据绑定的活动,片段等(也是Dagger变体)。 安装 要使用该库,请先使用... implementation( " org.mobiletoolkit.android.databinding:databinding:{RELEASE_TAG} " ) imp
DataBinding实现RecyclerView的Demo
databinding 的事件绑定