Flex數(shù)據(jù)綁定中難以發(fā)現(xiàn)的無聲錯(cuò)誤
這里向大家描述一下在使用Flex數(shù)據(jù)綁定時(shí)常見錯(cuò)誤,F(xiàn)lex數(shù)據(jù)綁定有時(shí)會(huì)減緩程序的初始化,并且當(dāng)開發(fā)者不是完全理解數(shù)據(jù)綁定的機(jī)制是如何工作的話,會(huì)引起一些開發(fā)者意想不到的問題。
Flex數(shù)據(jù)綁定陷阱
當(dāng)構(gòu)建Flex或者Adobe AIR程序時(shí),將一個(gè)對(duì)象的值自動(dòng)的傳遞給另一個(gè)對(duì)象這種處理是Flex數(shù)據(jù)綁定最常用并最有用的特征之一。盡管如此,同時(shí)Flex數(shù)據(jù)綁定會(huì)減緩程序的初始化,并且當(dāng)開發(fā)者不是完全理解數(shù)據(jù)綁定的機(jī)制是如何工作的話,會(huì)引起一些開發(fā)者意想不到的問題。***的解決方法及是確保你正確的使用了它并且在只有需要它的時(shí)候才使用它。
***條:難以發(fā)現(xiàn)的無聲錯(cuò)誤
這有些綁定操作似乎已經(jīng)工作,但是你***卻沮喪的發(fā)現(xiàn)沒有并且無從下手修改的例子。
在綁定表達(dá)式或者在綁定框架里調(diào)用綁定方法時(shí)拋出的異常和錯(cuò)誤,只會(huì)默默的捕獲。因此你將在Flash Player調(diào)試版本中看不到任何運(yùn)行時(shí)錯(cuò)誤。不僅綁定沒有工作,而且沒有任何錯(cuò)誤顯示。為什么這些錯(cuò)誤被無聲捕獲?代碼實(shí)現(xiàn)綁定機(jī)制,在Flex數(shù)據(jù)綁定發(fā)生前需要幾個(gè)先決條件。綁定機(jī)制會(huì)吞噬掉任何錯(cuò)誤以防止在運(yùn)行時(shí)拋出運(yùn)行時(shí)異常。如果你不希望在你的程序中看到這些可能出現(xiàn)的意外錯(cuò)誤,這是一個(gè)很好的事情。
思考下下面的簡(jiǎn)單綁定例子:
- <?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"
- preinitialize="handlePreinitialize()">
- <fx:Script>
- <![CDATA[
- [Bindable]
- private var xml:XML =
- <users>
- <user>
- <name>EladElrom</name>
- <address>1 Wall Street</address>
- </user>
- </users>;
- protected function handlePreinitialize():void
- {
- xml = null;
- //BindingManager.debugBinding("label.text");
- }
- ]]>
- </fx:Script>
- <s:Label id="label" text="{xml.user.name}"/>
- </s:Application>
我已經(jīng)添加了xml變量綁定到Label組件。這些代碼會(huì)運(yùn)行的很好;但是,我在組件預(yù)初始化時(shí)將xml變量設(shè)置為null。這個(gè)事件將在組件初始化序列開始之前被派發(fā),此時(shí)Label組件還沒有被設(shè)置。這個(gè)xml變量被設(shè)置為null,因此沒有name屬性在xml對(duì)象上。如果你運(yùn)行這個(gè)程序,你會(huì)發(fā)現(xiàn)Flex數(shù)據(jù)綁定沒有發(fā)生也沒有提示任何錯(cuò)誤。
原文地址:http://www.adobe.com/devnet/flex/articles/databinding_pitfalls_03.html
【編輯推薦】