Flex数据绑定陷阱(一)

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

          时间: 2024-08-24 04:34:13

          Flex数据绑定陷阱(一)的相关文章

          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" height="66

          Flex入门(一)——基本理论

          Flash作为一款漂亮动画的产品,是大家所喜爱的,他可以给我们带来更好的视觉效果.但是如何使其很快很好的让Java程序员,.net程序员等所接受,并进行相关开发,Macromedia公司在2004年3月发布的,基于其专有的MacromediaFlash平台,它是涵盖了支持RIA(Rich Internet Applications)的开发和部署的一系列技术组合. 是一种类似于Jsp和Asp的前台技术.这篇博客简单介绍一下关于flex的一些理论知识. 一,是什么,干什么用,优势,劣势? Flex是

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

          最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下:   1.UI控件与布局     2.MVVM     3.数据绑定     4.await/async     5.Linq查询     6.WCF RIA Services     7.序列化     8.委托与事件 1.UI控件与布局 常用的主要是Grid.StackPanel.Border,其中最常用的的是Grid,是一

          Flex中的折线图

          1.问题背景 在Flex中,制作一个折线图,并且给折线图的横轴和纵轴进行样式设置,具体实现步骤如下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> <mx:CategoryAxis categoryField="quarter" displayName="季度"/> </mx:horizontalAxis> <mx:horizontalAxisRenderers> <mx:A

          Flex中利用单选按钮切换柱状图横纵坐标以及描述

          1.问题描述 一组单选按钮,有周和月之分,选择“周”,柱状图横坐标显示的是周,纵坐标显示的是人数:选择“月”,柱状图横坐标显示的月,纵坐标显示的是比率. 2.演示实例 [plain] view plaincopy <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="

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

          config.xml文件的配置如下: <widget label="台风" icon="assets/images/typhoon.png" config="" url="widgets/ActualWeather/TyphoonWarningWidget.swf"/> 源代码目录如下: 界面效果: 大概的思路如下:从后台数据库获取台风的信息列表,展示在界面的表格里面:点击某条台风选项时候,会动态的在地图上展示台风

          详细介绍Flex中操作XML

          一  在介绍Flex中操作XML之前,首先简单介绍下XML中的基本术语. 元素:XML中拥有开始标签和结束标签的这一块称为“元素”    节点:把XML元素与文本结合起来统称为节点    根节点:位于整个XML文当顶端的节点    文本节点:包含文本的节点    属性:元素的组成部分,以键/值形式放在元素标签内 用一个例子来说明 <root_node><!--这是一个根节点也是一个元素--> <node attribute="value"><!

          Flex列在一个表格式的数字值

          1.问题背景 一般的.表格中展示的比率.对照率的处理是:保留两位小数,并向上保留 2.实现实例 <? 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="lib

          Flex在使用无线电的button切换直方图横坐标和叙述性说明

          1.问题叙述性说明 一组单选button,有周和月之分,选择"周",柱状图横坐标显示的是周,纵坐标显示的是人数:选择"月",柱状图横坐标显示的月,纵坐标显示的是比率. 2.演示实例 <? xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s=&