日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Flex數(shù)據(jù)綁定中難以發(fā)現(xiàn)的無聲錯誤

本文和大家重點討論一下Flex數(shù)據(jù)綁定陷阱中常見錯誤,數(shù)據(jù)綁定會減緩程序的初始化,并且當(dāng)開發(fā)者不是完全理解數(shù)據(jù)綁定的機制是如何工作的話,會引起一些開發(fā)者意想不到的問題。

Flex數(shù)據(jù)綁定陷阱中常見錯誤

當(dāng)構(gòu)建Flex或者Adobe AIR程序時,將一個對象的值自動的傳遞給另一個對象這種處理是數(shù)據(jù)綁定最常用并最有用的特征之一。盡管如此,同時數(shù)據(jù)綁定會減緩程序的初始化,并且當(dāng)開發(fā)者不是完全理解數(shù)據(jù)綁定的機制是如何工作的話,會引起一些開發(fā)者意想不到的問題。最好的解決方法及是確保你正確的使用了它并且在只有需要它的時候才使用它。在這篇文章中,我整理了十條開發(fā)者在構(gòu)建應(yīng)用使用數(shù)據(jù)綁定時常見的陷阱和錯誤。

Flex數(shù)據(jù)綁定陷阱第一條:難以發(fā)現(xiàn)的無聲錯誤

這有些綁定操作似乎已經(jīng)工作,但是你最后卻沮喪的發(fā)現(xiàn)沒有并且無從下手修改的例子。

在綁定表達式或者在綁定框架里調(diào)用綁定方法時拋出的異常和錯誤,只會默默的捕獲。因此你將在Flash Player調(diào)試版本中看不到任何運行時錯誤。不僅綁定沒有工作,而且沒有任何錯誤顯示。為什么這些錯誤被無聲捕獲?代碼實現(xiàn)綁定機制,在綁定發(fā)生前需要幾個先決條件。綁定機制會吞噬掉任何錯誤以防止在運行時拋出運行時異常。如果你不希望在你的程序中看到這些可能出現(xiàn)的意外錯誤,這是一個很好的事情。

思考下下面的簡單綁定例子:

 
 
 
 
  1.   
  2.    xmlns:s="library://ns.adobe.com/flex/spark"  
  3.    xmlns:mx="library://ns.adobe.com/flex/mx"  
  4.    minWidth="1024" minHeight="768"                                      
  5.    preinitialize="handlePreinitialize()">                          
  6.      
  7.       
  8.          [Bindable]  
  9.          private var xml:XML =   
  10.            
  11.               
  12.                EladElrom  
  13.                
    1 Wall Street
      
  14.               
  15.          ;     
  16.                                  
  17.          protected function handlePreinitialize():void  
  18.          { 
  19.             xml = null;  
  20.             //BindingManager.debugBinding("label.text");  
  21.          }  
  22.       ]]>  
  23.                             
  24.      

 我已經(jīng)添加了xml變量綁定到Label組件。這些代碼會運行的很好;但是,我在組件預(yù)初始化時將xml變量設(shè)置為null。這個事件將在組件初始化序列開始之前被派發(fā),此時Label組件還沒有被設(shè)置。這個xml變量被設(shè)置為null,因此沒有name屬性在xml對象上。如果你運行這個程序,你會發(fā)現(xiàn)綁定沒有發(fā)生也沒有提示任何錯誤。

調(diào)試Flex數(shù)據(jù)綁定

雖然錯誤被無聲的捕獲,你仍然有辦法可以找出是怎么回事。使用BindingManager.as和Binding.as來進行調(diào)試并不容易,因為如果你沒有下載完整的Flex sdk的話,綁定類是沒有的。相反,你可以設(shè)置一個斷點并跟蹤相關(guān)的綁定對象來找出問題所在。在這種情況下,你會發(fā)現(xiàn)xml對象的值被設(shè)置為null,這就是為什么綁定為什么失敗的原因(看圖1)。

圖1. xml對象的值被設(shè)置為null

另一種方法更加直觀,是使用BindingManager類的debugBinding方法。你設(shè)置你想觀察的組件和屬性,然后你就可以看到被捕獲的錯誤。在上面的示例代碼中,我給下面的這行代碼加了注釋:
BindingManager.debugBinding("label.text");
把這行的注釋去掉并在debug模式下運行它;你將在控制臺看到綁定錯誤(見圖2)

圖2.控制臺輸出的Flex數(shù)據(jù)綁定錯誤

看一下Binding.as和BindingManager.as類的代碼。代碼中含有許多的try...catch表達式來確保形成有效綁定的條件。以下有一些在綁定時可能拋出的錯誤類型:

    ◆ Error #1006: Call attempted on an object that is not a function.
    ◆ Error #1009: Null has no properties.       
    ◆ Error #1010: Undefined has no properties.       
    ◆ Error #1055: Has no properties.
    ◆ Error #1069: Property - not found on - and there is no default value
       
    ◆錯誤#1006:試圖調(diào)用的對象不是函數(shù)。
    ◆錯誤#1009:空沒有屬性。
    ◆錯誤#1010:未定義沒有屬性。
    ◆錯誤#1055:沒有屬性。
    ◆錯誤#1069:屬性 - 找不到 - 并且沒有默認(rèn)值

如果任何這些錯誤發(fā)生,綁定對象將默默捕獲他們并不再實現(xiàn)綁定。你可以使用綁定管理的調(diào)試選項來看到這些錯誤。綁定管理除了捕獲這些錯誤之外還捕獲其他的錯誤。


當(dāng)前文章:Flex數(shù)據(jù)綁定中難以發(fā)現(xiàn)的無聲錯誤
文章路徑:http://www.dlmjj.cn/article/djpcsdh.html