这里向大家描述一下在使用Flex数据绑定时常见错误,Flex数据绑定有时会减缓程序的初始化,并且当开发者不是完全理解数据绑定的机制是如何工作的话,会引起一些开发者意想不到的问题。
Flex数据绑定陷阱
当构建Flex或者Adobe AIR程序时,将一个对象的值自动的传递给另一个对象这种处理是Flex数据绑定最常用并最有用的特征之一。尽管如此,同时Flex数据绑定会减缓程序的初始化,并且当开发者不是完全理解数据绑定的机制是如何工作的话,会引起一些开发者意想不到的问题。***的解决方法及是确保你正确的使用了它并且在只有需要它的时候才使用它。
***条:难以发现的无声错误
这有些绑定操作似乎已经工作,但是你***却沮丧的发现没有并且无从下手修改的例子。
在绑定表达式或者在绑定框架里调用绑定方法时抛出的异常和错误,只会默默的捕获。因此你将在Flash Player调试版本中看不到任何运行时错误。不仅绑定没有工作,而且没有任何错误显示。为什么这些错误被无声捕获?代码实现绑定机制,在Flex数据绑定发生前需要几个先决条件。绑定机制会吞噬掉任何错误以防止在运行时抛出运行时异常。如果你不希望在你的程序中看到这些可能出现的意外错误,这是一个很好的事情。
思考下下面的简单绑定例子:
- <?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>
我已经添加了xml变量绑定到Label组件。这些代码会运行的很好;但是,我在组件预初始化时将xml变量设置为null。这个事件将在组件初始化序列开始之前被派发,此时Label组件还没有被设置。这个xml变量被设置为null,因此没有name属性在xml对象上。如果你运行这个程序,你会发现Flex数据绑定没有发生也没有提示任何错误。
原文地址:http://www.adobe.com/devnet/flex/articles/databinding_pitfalls_03.html
【编辑推荐】