Flex数据绑定陷阱(一)
Flex数据绑定陷阱:常见的误用和错误
当构建Flex或者Adobe AIR程序时,将一个对象的值自动的传递给另一个对象这种处理是数据绑定最常 用并最有用的特征之一。
尽管如此,同时数据绑定会减缓程序的初始化,并且当开发者不是完全理解数据绑定的机制是如何工作的话,会引 起一些开发者意想不到的问题。
最好的解决方法及是确保你正确的使用了它并且在只有需要它的时候才使用它。在这篇文章中,我整理了十条开发者在构建应用使用数据绑定时常见的陷阱和错误。
第一条:
难以发现的无声错误
这有些绑定操作似乎已经工作,但是你最后却沮丧的发现没有并且无从下手修改的例子。
在绑定表达式或者在绑定框架里调用绑定方法时抛出的异常和错误,只会默默的捕 获。因此你将在Flash Player调试版本中看不到任何运行时错误。不仅绑定没有工作,
而且没有任何错误显示。为什么这些错误被无声捕获?
代码实现绑定机制,在绑定发生前需要几个先决条件。绑定 机制会吞噬掉任何错误以防止在运行时抛出运行时异常。
如果你不希望在你的程序中看到这些可能出现的意外错误,这是一个很好的事情。
思考下下面的简单绑定例子:
- <?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对象上。
如果你运行这个程序,你会发现绑定没有发生也没有提示任何错误。
调试绑定
虽然错误被无声的捕获,你仍然有办法可以找出是怎么回事。
使用BindingManager.as和Binding.as来进行调试并不容易,因为如果你没有下载完整的Flex sdk的话,绑定类是没有的。
相反,你可以设置一个断点并跟踪相关的绑定对象来找出问题所在。在这种情况下,你会发现xml对象的值被设置为null,这就是为什么绑定为什么失败的原 因(看图1)。

图1. xml对象的值被设置为null
另一种方法更加直观,是使用BindingManager类的debugBinding方法。
你设置你想观察的组件和属性,然后你就可以看到被捕获的错误。
在上面的示例代码中,我给下面的这行代码加了注释:
- BindingManager.debugBinding("label.text");
复制代码
把这行的注释去掉并在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数据绑定陷阱(一)的更多相关文章
- Flex 数据绑定
Flex 数据绑定 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:f ...
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块
config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...
- 转 Flex MXML编译成AS类
2009-09-22 23:25 Flex MXML编译成AS类 由“Flex 基础”文中可知:每一个mxml文件首先要编译成as文件,然后再译成swf文件.app.mxml文件编译后会产生一系列中间 ...
- Flex Builder读书笔记(二)——MXML
MXML类似于HTML,它提供各种标签来定义用户界面,但是它比HTML的结构更为严格,并拥有跟多的应用标签.MXML不仅包括可视标签,还包括不可视标签,如web service连接.数据绑定和动画效果 ...
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...
- [转]AngularJS: 使用Scope时的6个陷阱
在使用AngularJS中的scope时,会有6个主要陷阱.如果你理解AngularJS背后的概念的话,这6个点其实非常的简单.但是在具体讲述这6个陷阱之前我们先要讲两个其它的概念. 概念1: 双向数 ...
- Flex学习总结
Flex SDK Flex框架类库.Flex编译环境.调式器.MXML.ActionScript编程语言以及其它工具组成,Flash Builder是其开发环境, Flash Player的工作模 ...
- Flex Metadata tags 元数据标签
1.[Alternative] [可替换] 标明此类可以被参数中的类替换,版本号说明发生替换的版本. [Alternative]和[Deprecated] 不同.如果是[不建议使用]的类,以后的版本可 ...
- Flex中的折线图
1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...
随机推荐
- JavaScript学习笔记-函数
函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...
- 总结CSS3新特性(媒体查询篇)
CSS3的媒体查询是对CSS2媒体类型的扩展,完善; CSS2的媒体类型仅仅定义了一些设备的关键字,CSS3的媒体查询进一步扩展了如width,height,color等具有取值范围的属性; medi ...
- SAP学习日志--RFC REMOTE FUNCTION CALL
RFC Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的 SAP系统提供了三种外部 ...
- CRM 2013 中业务流程的
在CRM 2013 中有一个新功能就业务流程,它可以引导用户在既定好的业务规则下操作表单,实现业务之前的衔接.并且让衔接可以视化,能清楚定位到当前的流程在那个节点.我们在配置视图的时候可以将流程阶段放 ...
- Atitit.git的存储结构and 追踪
Atitit.git的存储结构and 追踪 1. Add index.js 2 index1 1.1. new1 1.2. Modify1 2. Commit1 1. Add index.js 2 i ...
- [Android]竖直滑动选择器WheelView的实现
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3819304.html 公司项目中有这么一个需求,所以需要自己实现下.效 ...
- xmpp整理笔记:用户网络连接及好友的管理
xmpp中的用户连接模块包括用户的上线与下线信息展现,用户登录,用户的注册: 好友模块包括好友的添加,好友的删除,好友列表的展示. 在xmpp中 负责数据传输的类是xmppStream,开发的过程中, ...
- rabbitmq_management 安装失败
安装rabbitmq_management的时候出现错误 不能连接rabbit,所以查看状态 看意思感觉好像是rabbit没有运行,但是安装的时候都是默认安装的,所以安装完以后服务的名字就是Rabbi ...
- cocoapod-使用cocoapod安装AFNetworking3.0
1. 在终端用cd命令加入到工程目录下,用命令:touch Podfile创建一个Podfile文件. 2. Podfile文件: #source 'https://github.com/CocoaP ...
- MPlayerX——MAC OS 最好用的播放器
MPlayerX真是一个不错的软件,它真的可以称得上在MAC OS里最好用的播放器,它功能强大,可以播放你所知道的任何格式的视频和音频文件.他的选项非常丰富,可以自定义设置的东西很多,但又不失简洁的风 ...