Flex Data Binding Pitfalls and Common Misuse Mistakes
1. Using [Bindable] When Binding Is Not Necessary
<?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"> <fx:Declarations> <!-- Place non-visual elements (e.g., services, value objects) here --> </fx:Declarations> <fx:Script> <![CDATA[ private var text:String = "Hello, World"; ]]> </fx:Script> <s:VGroup> <!-- Bad Practice: <s:TextInput text="{text}"/> --> <s:TextInput id="textInput" text="Hello, World"/> </s:VGroup> </s:Application>
Comment:
1) In the bad practice, the mxmlc still generates code allow binding as this is a one-time assignment.
2) In good practice, we do direct assignment and we can change the text by refering to its id property.
2. Using the Wrong Bindable Event Name
public static const EVENT_CHANGED_CONST:String = "eventChangedConst"; private var _number:Number = 0; [Bindable(event=EVENT_CHANGED_CONST)] public function get number():Number { return _number; } public function set number(value:Number) : void { _number = value; dispatchEvent(new Event(EVENT_CHANGED_CONST)); }
Comment:
1) Assigning a static property to the event name. But when the number changes the binding tag doesn't recognize the change. The reason is the the event name will be EVENT_CHANGED_CONST and not the value of the variable.
3. Assuming Execution Order of Binding
<?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="1024" minHeight="768" creationComplete="creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; [Bindable] public var buttonText:String = "Execution order mistake "; ]]> </fx:Script> <s:layout> <s:HorizontalLayout /> </s:layout> <s:Label id="simpleText" text="{buttonText}" /> <s:Button label="{simpleText.text}" /> </s:Application>
<?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="1024" minHeight="768"> <s:TextInput id="textInput1" x="10" y="0" /> <s:TextInput id="textInput2" x="0" y="{textInput1.x+25}" /> </s:Application>
Comment:
1) Never assuming that binding order is in synchronous execution order!
4. Assigning a Binding Tag When You Don't Need It
1)Bad Practice
<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="1024" minHeight="768"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; [Bindable] public var dp:Array = [ { label:"New York", data: "New York" }, { label:"Miami Beach", data: "Miami Beach" } ]; ]]> </fx:Script> <mx:ComboBox id="cb" editable="false" width="100" dataProvider="{dp}" /> </s:Application>
2) Good Practice
<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="1024" minHeight="768" creationComplete="creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import mx.events.FlexEvent; public var dp:Array = [ { label:"New York", data: "New York" }, { label:"Miami Beach", data: "Miami Beach" } ]; protected function creationCompleteHandler(event:FlexEvent):void { cb.dataProvider = dp; } ]]> </fx:Script> <mx:ComboBox id="cb" editable="false" width="100" /> </s:Application>
Comment:
1) If we just want to fetch data which is clearly known at compile time or can be filled with at run time, we can just assign the data to destination instead of binding data which cost overheads.
5. Binding Class and Binding Property at the Same Time
package vo { [Bindable] public class Student { [Bindable] 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; } } }
Comment:
1) The class has already been assigned as [Bindable], so there is no need to assign a specific attribute as [Bindable] which will trigger a warning.
相关推荐
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声明...
: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-...
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...
Tarea2RecyclerView:使用DataBinding和callBack的Recycler视图
:dna: Android DataBinding工具包,用于通知数据从模型层到UI层的更改。 该库提供了DataBinding的基类(BindingActivity,BindingFragment,BindingViewModel), 并支持在没有可观察字段和LiveData的情况下通知...
即时天气 :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
Room、LiveData、ViewModel、Paging、DataBinding这些库怎么结合起来使用?怎样用AndroidX取代Support Library?传统MVP和基于Jetpack实现的MVVM有什么区别?这个App应该能给大家一点启发。欢迎star/fork。 分支含义...
DataBinding实现RecyclerView的Demo