`
vip_chenlin
  • 浏览: 7377 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多

Flex数据绑定陷阱:常见的误用和错误
当构建Flex或者Adobe AIR程序时,将一个对象的值自动的传递给另一个对象这种处理是数据绑定最常用并最有用的特征之一。
尽管如此,同时数据绑定会减缓程序的初始化,并且当开发者不是完全理解数据绑定的机制是如何工作的话,会引起一些开发者意想不到的问题。
最好的解决方法及是确保你正确的使用了它并且在只有需要它的时候才使用它。在这篇文章中,我整理了十条开发者在构建应用使用数据绑定时常见的陷阱和错误。

第一条:
难以发现的无声错误

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

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

代码实现绑定机制,在绑定发生前需要几个先决条件。绑定机制会吞噬掉任何错误以防止在运行时抛出运行时异常。
如果你不希望在你的程序中看到这些可能出现的意外错误,这是一个很好的事情。

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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.    xmlns:s="library://ns.adobe.com/flex/spark"
  4.    xmlns:mx="library://ns.adobe.com/flex/mx"
  5.    minWidth="1024" minHeight="768"                                    
  6.    preinitialize="handlePreinitialize()">                        

  7.    <fx:Script>
  8.       <![CDATA[
  9.          [Bindable]
  10.          private var xml:XML =
  11.          <users>
  12.             <user>
  13.                <name>EladElrom</name>
  14.                <address>1 Wall Street</address>
  15.             </user>
  16.          </users>;   
  17.                               
  18.          protected function handlePreinitialize():void
  19.          {
  20.             xml = null;
  21.             //BindingManager.debugBinding("label.text");
  22.          }
  23.       ]]>
  24.    </fx:Script>
  25.                         
  26.    <s:Label id="label" text="{xml.user.name}"/>

  27. </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:属性 - 找不到 - 并且没有默认值

如果任何这些错误发生,绑定对象将默默捕获他们并不再实现绑定。
你可以使用绑定管理的调试选项来看到这些错误。
绑定管理除了捕获这些错误之外还捕获其他的错误。

分享到:
评论

相关推荐

    flex数据绑定的原理

    6. **性能优化**:Flex数据绑定系统还包含了一些性能优化,比如变化传播的限制和缓存机制,以避免不必要的更新和提高效率。 7. **表达式绑定**:除了简单的变量绑定,Flex还支持复杂的表达式绑定,可以连接多个数据...

    FLEX资源——FLEX数据绑定专题(中文PDF)

    7. **实用案例与最佳实践**:实际开发中的例子和最佳实践将帮助读者更好地理解和应用数据绑定,避免常见错误,并优化性能。 8. **问题排查与调试**:文档可能包含如何诊断和解决数据绑定问题的方法,这对于开发者来...

    flex数据绑定 pdf

    这份名为“FLEX数据绑定专题”的PDF文档,很可能深入探讨了这一主题,提供了详细的理论知识和实践案例。 在Flex中,数据绑定是一个自动化的过程,它使得视图组件(如文本框、列表等)能够自动反映出数据源的变化,...

    FLEX 数据绑定专题一(转)

    通过学习和掌握FLEX的数据绑定,开发者可以更高效地构建交互式的富客户端应用程序,减少重复代码,提高代码可维护性。在实际项目中,理解数据绑定的底层机制和最佳实践,对于优化性能和提升用户体验都是至关重要的。...

    Flex数据绑定专题

    ### Flex数据绑定专题详解 #### 一、数据绑定概述 数据绑定是Flex应用程序开发中的核心概念之一,它指的是将一个对象中的数据与另一个对象中的数据建立连接的过程。通过数据绑定,开发者可以实现在应用程序的不同...

    FLEX数据绑定四种方式

    ### FLEX数据绑定四种方式详解 #### 一、概述 数据绑定是现代应用程序开发中一个重要的概念和技术。在Flex框架中,数据绑定被广泛应用来连接数据源与用户界面(UI)元素,使得数据能够实时更新并反映到界面上。本文将...

    flex 数据绑定 dataGrid.rar

    下面我们将深入探讨Flex数据绑定的原理和DataGrid的使用方法。 一、Flex数据绑定 1. **基础概念**:数据绑定是连接两个属性的过程,其中一个属性的变化会自动反映到另一个属性上。在Flex中,我们可以使用`{}`符号...

    flex数据绑定

    Flex中的数据绑定机制会捕获一系列常见的错误,包括但不限于: - `Error#1006: Call attempted on an object that is not a function.` 当尝试对非函数对象执行调用时触发。 - `Error#1009: null has no properties...

    Flex数据绑定[收集].pdf

    Flex数据绑定是软件开发中Adobe Flex或Adobe AIR应用程序的核心特性,它允许数据在不同对象之间自动同步。数据绑定简化了用户界面(UI)组件与数据源之间的交互,减少了手动更新的需要。然而,如果不理解其工作原理...

    FLEX数据绑定专题

    在Flex 4中,数据绑定主要分为两种类型:声明式数据绑定和编程式数据绑定。声明式数据绑定通过XML语法在MXML文件中直接设置,如`&lt;mx:Label text="{data.name}" /&gt;`,这将Label组件的文本属性与名为"data"的对象的...

    flex企业应用开发笔记-数据绑定

    在Flex企业应用开发中,数据绑定...总之,Flex的数据绑定是构建动态和响应式用户界面的关键技术,它使得数据模型和用户界面之间的通信变得简单而高效。理解并熟练运用这一机制,能够提升Flex应用的开发效率和用户体验。

    Flex 数据绑定

    Flex 数据绑定是Adobe Flex框架中的一个核心特性,它允许开发者创建动态、响应式的用户界面,使得数据模型的变化能够实时反映到视图上,反之亦然。这种机制大大简化了UI与后台数据同步的过程,减少了手动更新UI的...

    Flex Bind数据绑定实例代码

    Flex Bind数据绑定是Adobe Flex应用程序开发中的核心特性,它允许开发者在用户界面组件和应用程序模型之间建立动态连接,实现数据的自动同步。这种强大的功能极大地简化了编程逻辑,特别是处理用户交互和数据更新时...

    Flex数据访问:WebService

    在开发Flex应用程序时,与外部服务进行数据交互是非常常见的需求,而WebService组件则提供了访问SOAP Web服务的功能。SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在不同的软件系统间交换结构化...

    flex页面跳转及数据绑定

    在Flex开发中,页面跳转和数据绑定是两个核心概念,它们对于构建动态且交互性强的应用至关重要。让我们分别深入探讨这两个主题。 首先,Flex页面跳转。在Flex中,有多种方式来实现场景间的切换: 1. **ViewStack...

    flex3 数据绑定 总结

    总的来说,Flex 3 的数据绑定是一种强大的机制,它简化了应用程序中数据流的管理。通过 MXML 或 ActionScript,开发者可以选择最适合其需求的方式来实现数据绑定,从而提高代码的可读性和可维护性。无论是简单的属性...

    Flex初级数据绑定代码

    ### Flex初级数据绑定代码解析 #### 一、概述 本文将详细介绍一个Flex应用程序中的初级数据绑定实例。通过分析HelloWorld2.mxml文件,我们将深入了解Flex中的数据绑定机制及其基本用法。 #### 二、Flex与数据绑定...

    Flex高级数据绑定实例(界面语言切换)

    ### Flex高级数据绑定实例——界面语言切换 #### 概述 在Flex开发中,实现界面的多语言切换是一项常见的需求。本示例通过一个具体的代码片段来展示如何使用Flex中的高级数据绑定技术来实现这一功能。该示例不仅...

Global site tag (gtag.js) - Google Analytics