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. 微信旧岛小程序章节目录

    索引 第一章 申请appkey ## 标题##我是 标题 第二章 准备工作 小程序开发工具介绍和第三方开发工具介绍 第三章 小程序基础知识 与新特性 1.小程序的4种文件类型 2.小程序的组织结构 3 ...

  2. Flex技术中的陷阱

    理想很丰满,现实很丑陋,梦想是在程序的高速公路上奔跑,现实是在代码的沙滩上爬行,还爬的遍体鳞伤 1.Number类型的小数并不精确,可能小数N个0后面会多出一个数字,需要toFix一下,否则各种数字比 ...

  3. Flex Form表单 表格加载XML 数据绑定

    2010-10-29 1.数据绑定 : bb中显示aa中的内容 <mx:TextInput id="aa" x="200" y="20" ...

  4. 改善FLEX/FLASH性能的小技巧(转)

    使用下面的几个改善性能的技巧,如果你使用Flex Builder,那么可以使用调试窗口查看你的程序中关键的几步创建对象和内存回收的情况. 有时细小的调整会造成很大的不同.下面是一小部分能够改善你的程序 ...

  5. 小程序学习---开启小程序之旅(项目、配置、页面、数据绑定)

    一.前沿 从这个章节开始进入实战状态,利用项目以及小demo来逐步认识小程序.主要包含以下内容 1.注册程序和页面 2.数据绑定 3.循环 4.条件 5.运算 6.模板 7.事件 8.引用 9.组件 ...

  6. Flex+J2EE 之小记

    Flex+J2EE 之小记 Jack. Wang 2008-9-10(本待完善...)  wbjeasygo@163.com  由于本人也是初学者(刚看了两天视频),所以请高手指点,这里赞下 blog ...

  7. Flex/Silverlight的技术比较转

    基于个人的使用经验,我从语言.框架.开发环境和运行环境四个方面对Flex和Silverlight这两门技术做一个比较,自己认为这个比较还是比较全面的.(这样的比较有意义吗?个人意见,只要别把自己当成宗 ...

  8. Flex 元数据标签使用

    Flex 元数据标签1.[ArrayElementType] 使用ArrayElementType元数据标签可以让你定义数组元素的数据类型.程序代码:[ArrayElementType("S ...

  9. Flex/Silverlight的技术比较

    Flex/Silverlight的技术比较 别人博客上看见的,一文下去,引起口水大战,其实仁者见仁,智者见智,每种语言都不可能是完善的,扬长避短才是王道. 基于个人的使用经验,我从语言.框架.开发环境 ...

最新文章

  1. flannel原理初探针对0.1.0版本
  2. vscode 补全功能,和函数跳转
  3. 华农保险 × 神策数据 OpenDay:保险如何从 0 到 1 落地数字化转型?
  4. 计算机验证型数学实验报告,精心设计论文,关于精心设计数学实验培养学生数学能力相关参考文献资料-免费论文范文...
  5. 解决《Mobile绘制背景图片》中的问题
  6. keybd_event、SendInput笔记
  7. Terraform 支持自动化开通阿里云产品
  8. Mac安装Lingo
  9. 通过海康sdk捕获码流数据实现抓图功能
  10. python文件对象提供了3个读方法、分别是-案例驱动式Python基础与应用-超星尔雅-学习通-题库零氪...
  11. QT学习笔记(一)——QT基础
  12. 威漫哨兵机器人_漫威哨兵机器人真的可以模仿所有超能力吗?
  13. Python 编程笔记(本人出品,必属精品)
  14. 阿狸表情图采集代码示例
  15. 蒲月“登高”,临风眺望,旷视邀您共赴AI的下一个十年之约
  16. 用大气噪声生成Java中的随机数
  17. pytorch每日一学22(torch.empty()、torch.empty_like()、torch.empty_strided())创建未初始化数据的tensor
  18. Anima2D官方中文使用手册(对应Anima2D1.1.4)
  19. SQL之统计某一状态数量
  20. Switch控件详解

热门文章

  1. Java笔试——2021届秋招编程题汇总
  2. android 原理 组合控件_Android_组合方式自定义控件
  3. ORB-SLAM学习--GitHub上较好的版本
  4. Ubuntu16.04+ROS+ORB-SLAM2测试(转载)
  5. Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO
  6. 李宏毅机器学习作业2:Winner还是Losser(含训练数据)
  7. python文件打开模式rb表示只读模式打开文件_一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)...
  8. 450g带盖吐司配方_450g带盖吐司烤多久
  9. PyQt5 笔记7 -- 多个类共享信号
  10. Python实现朴素贝叶斯算法