Flex数据绑定陷阱(一)
Flex數據綁定陷阱:常見的誤用和錯誤
當構建Flex或者Adobe?AIR程序時,將一個對象的值自動的傳遞給另一個對象這種處理是數據綁定最常 用并最有用的特征之一。
盡管如此,同時數據綁定會減緩程序的初始化,并且當開發者不是完全理解數據綁定的機制是如何工作的話,會引 起一些開發者意想不到的問題。
最好的解決方法及是確保你正確的使用了它并且在只有需要它的時候才使用它。在這篇文章中,我整理了十條開發者在構建應用使用數據綁定時常見的陷阱和錯誤。
第一條:
難以發現的無聲錯誤
這有些綁定操作似乎已經工作,但是你最后卻沮喪的發現沒有并且無從下手修改的例子。
在綁定表達式或者在綁定框架里調用綁定方法時拋出的異常和錯誤,只會默默的捕 獲。因此你將在Flash Player調試版本中看不到任何運行時錯誤。不僅綁定沒有工作,
而且沒有任何錯誤顯示。為什么這些錯誤被無聲捕獲?
代碼實現綁定機制,在綁定發生前需要幾個先決條件。綁定 機制會吞噬掉任何錯誤以防止在運行時拋出運行時異常。
如果你不希望在你的程序中看到這些可能出現的意外錯誤,這是一個很好的事情。
思考下下面的簡單綁定例子:
?
復制代碼
?
我已經添加了xml變量綁定到Label組件。這些代碼會運行的很好;但是,我在組件預初始化時 將xml變量設置為null。
這個事件將在組件初始化序列開始之前被派發,此時Label 組件還沒有被設置。這個xml變量被設置為null,因此沒有name屬性在xml對象上。
如果你運行這個程序,你會發現綁定沒有發生也沒有提示任何錯誤。
調試綁定
雖然錯誤被無聲的捕獲,你仍然有辦法可以找出是怎么回事。
使用BindingManager.as和Binding.as來進行調試并不容易,因為如果你沒有下載完整的Flex sdk的話,綁定類是沒有的。
相反,你可以設置一個斷點并跟蹤相關的綁定對象來找出問題所在。在這種情況下,你會發現xml對象的值被設置為null,這就是為什么綁定為什么失敗的原 因(看圖1)。
?
圖1. xml對象的值被設置為null
?
另一種方法更加直觀,是使用BindingManager類的debugBinding方法。
你設置你想觀察的組件和屬性,然后你就可以看到被捕獲的錯誤。
在上面的示例代碼中,我給下面的這行代碼加了注釋:
?
復制代碼
?
把這行的注釋去掉并在debug模式下運行它;你將 在控制臺看到綁定錯誤(見圖2)
?
圖2.控制臺輸出的綁定錯誤
?
看一下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:試圖調用的對象不是函數。
? ? *錯誤#1009:空沒有屬性。
? ? *錯誤#1010:未定義沒有屬性。
? ? *錯誤#1055:沒有屬性。
? ? *錯誤#1069:屬性 - 找不到 - 并且沒有默認值
如果任何這些錯誤發生,綁定對象將默默捕獲他們并不再實現綁定。
你可以使用綁定管理的調試選項來看到這些錯誤。
綁定管理除了捕獲這些錯誤之外還捕獲其他的錯誤。
?
本文來自:http://blog.csdn.net/gongyongxing/archive/2010/08/10/5801472.aspx
總結
以上是生活随笔為你收集整理的Flex数据绑定陷阱(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库入门基本操作1
- 下一篇: 【SICP练习】101 练习2.77-2