Flex数据绑定陷阱:常见的误用和错误

当构建Flex或者Adobe AIR程序时,将一个对象的值自动的传递给另一个对象这种处理是数据绑定最常 用并最有用的特征之一。

尽管如此,同时数据绑定会减缓程序的初始化,并且当开发者不是完全理解数据绑定的机制是如何工作的话,会引 起一些开发者意想不到的问题。

最好的解决方法及是确保你正确的使用了它并且在只有需要它的时候才使用它。在这篇文章中,我整理了十条开发者在构建应用使用数据绑定时常见的陷阱和错误。

第一条:

难以发现的无声错误

这有些绑定操作似乎已经工作,但是你最后却沮丧的发现没有并且无从下手修改的例子。

在绑定表达式或者在绑定框架里调用绑定方法时抛出的异常和错误,只会默默的捕 获。因此你将在Flash Player调试版本中看不到任何运行时错误。不仅绑定没有工作,

而且没有任何错误显示。为什么这些错误被无声捕获?

代码实现绑定机制,在绑定发生前需要几个先决条件。绑定 机制会吞噬掉任何错误以防止在运行时抛出运行时异常。

如果你不希望在你的程序中看到这些可能出现的意外错误,这是一个很好的事情。

思考下下面的简单绑定例子:

    1. <?xml version="1.0" encoding="utf-8"?>

    1. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

    1. xmlns:s="library://ns.adobe.com/flex/spark"

    1. xmlns:mx="library://ns.adobe.com/flex/mx"

    1. minWidth="1024" minHeight="768"

    1. preinitialize="handlePreinitialize()">

    1. <fx:Script>

    1. <![CDATA[

    1. [Bindable]

    1. private var xml:XML=

    1. <users>

    1. <user>

    1. <name>EladElrom</name>

    1. <address>1 Wall Street</address>

    1. </user>

    1. </users>;

    1. protected function handlePreinitialize():void

    1. {

    1. xml = null;

    1. //BindingManager.debugBinding("label.text");

    1. }

    1. ]]>

    1. </fx:Script>

    1. <s:Label id="label" text="{xml.user.name}"/>

    1. </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方法。

你设置你想观察的组件和属性,然后你就可以看到被捕获的错误。

在上面的示例代码中,我给下面的这行代码加了注释:

    1. 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数据绑定陷阱(一)的更多相关文章

  1. Flex 数据绑定

    Flex 数据绑定 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:f ...

  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十三)台风模块

    config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config ...

  3. 转 Flex MXML编译成AS类

    2009-09-22 23:25 Flex MXML编译成AS类 由“Flex 基础”文中可知:每一个mxml文件首先要编译成as文件,然后再译成swf文件.app.mxml文件编译后会产生一系列中间 ...

  4. Flex Builder读书笔记(二)——MXML

    MXML类似于HTML,它提供各种标签来定义用户界面,但是它比HTML的结构更为严格,并拥有跟多的应用标签.MXML不仅包括可视标签,还包括不可视标签,如web service连接.数据绑定和动画效果 ...

  5. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

  6. [转]AngularJS: 使用Scope时的6个陷阱

    在使用AngularJS中的scope时,会有6个主要陷阱.如果你理解AngularJS背后的概念的话,这6个点其实非常的简单.但是在具体讲述这6个陷阱之前我们先要讲两个其它的概念. 概念1: 双向数 ...

  7. Flex学习总结

    Flex SDK Flex框架类库.Flex编译环境.调式器.MXML.ActionScript编程语言以及其它工具组成,Flash Builder是其开发环境,   Flash Player的工作模 ...

  8. Flex Metadata tags 元数据标签

    1.[Alternative] [可替换] 标明此类可以被参数中的类替换,版本号说明发生替换的版本. [Alternative]和[Deprecated] 不同.如果是[不建议使用]的类,以后的版本可 ...

  9. Flex中的折线图

    1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...

随机推荐

  1. spring web MVC

    详情:http://blog.csdn.net/mic_hero/article/details/50237627

  2. VMware虚拟机无法访问外网

    1.环境条件 2.VMware检查 3.虚拟机检查 1) vi /etc/sysconfig/network ----------------------------- NETWORKING=yes ...

  3. 一步一步教你如何解锁被盗的iPhone 6S

    即使你的iPhone6S设置了六位数的密码,甚至还设置了touch ID,但我要告诉你的是:你的手机仍然能被犯罪分子解锁. 事件背景 三天前,一位苹果用户的iPhone6S被偷了.随后,小偷重置了该用 ...

  4. 劳动节脑洞大开!利用Debug API 获取 加壳客户端的MD5值

    系统 : Windows xp 程序 : 某游戏客户端 程序下载地址 :不提供 要求 : 远程注入 & 获取MD5值 使用工具 : vc++6.0 & OD 案例说明: 该游戏客户端对 ...

  5. SharePoint Online 创建门户网站系列之定制栏目

    前 言 SharePoint Online自带的库就带有二级页面和详细页面,也就是Allitems页面和DispForm页面,但是实在不够美观,尤其对于门户网站这一企业门面来说,更是无法接受. 下面, ...

  6. Ioc Autofac心得

    对于这个容器注入,个人也不是很熟悉,很多还不懂,只会基本的操作,几天把它记录下来,说不定以后帮助就大了呢,这方面跟安卓差距还是挺大的 下面记录下应用的流程 步骤: 1.添加应用 2.重写工厂(这里讲的 ...

  7. 关于condition variable的理解

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  8. List集合概述

    上篇总结了Set集合,这回总结下List集合....先来框架图: 一.List集合 List集合代表一个元素有序,可重复的集合,集合中每个元素都有对应的顺序索引.List接口中增加了一些根据索引操作元 ...

  9. 解决Dialog 消失,输入法不消失的问题

    前言:今天遇到一个奇怪的问题,Activity 里面弹出一个 dialog , 这个dialog里面有EditText . 问题:当 dialog 里面的输入法出现的时候,此时让diolog 消失,输 ...

  10. 运算符&,|,^

    1.&按位“与”的计算是把两个数字分别写成二进制形式,然后按照每一位进行比较,&计算中,只要有一个是0就算成02.|运算转换成2进制进行比较,两个位只要有一个为1,那么结果就是1,否则 ...