- 浏览: 68763 次
- 性别:
- 来自: 北京
最新评论
-
_MyCould:
Flex Module基础 -
szlaptop:
这个正式我一直想的,楼主,能帖图上来看看吗?谢谢
最近完成的某系统的报表组件 -
wfzhanga:
楼主整理的不错,能不能把代码传上去啊。如果方便请帮我传一下啊, ...
flex ToolTip专题 -
bence:
总结的很好,谢谢分享
Flex Metadata Tag高级应用 -
fansfirst2008:
楼主太强了,不仅把东西讲解得深入浅出,而且写的文字表达很漂亮! ...
flex itemRenderer使用(一)内联渲染器
itemRenderer 最擅长与应用程序的用户通信。有时通信很简单, 只是显示一个名称;有时会使用更精致的颜色;有时具有交互性。
itemEditor 是真正的交互控制, 但它们不是本文的重点。在这些示例中, 我将向您展示根据数据本身或用户操作更改可视外观的 itemRenderer。
Flex <mx:State> 是更改 itemRenderer 外观的一个理想方法。状态使用简便, 并且与过渡结合使用时, 可以为用户提供反馈和愉悦的体验。
在本例中, 您将为列表新建一个 MXML itemRenderer(记住, 如果您愿意, 完全可以使用 ActionScript 这样做)。这个 itemRenderer 显示图像、书名、作者、价格以及用于购买这本书籍的 Button。
但是, 您想要实现的是, 如果书籍售空(数据包含 <instock> 节点, 它们是 yes 或 no), 价格和“购买”Button 会消失。我为价格和 Button 的 HBox 父代增加了一个 id 属性, 使此处的编码更简单一些。这样, 我可以通过更改 HBox 和 priceBox 的可视性来更改那些项目的可视性。
通过覆盖 set data 函数可以这样做, 您将会这么做, 但不是直接更改 priceBox 的可视性, 而是使用以下状态定义:
将以下内容放在根 <mx:HBox> 标记下。
这个示例有些牵强, 因为它过于复杂, 不适合执行简单任务, 但它说明了如何使用状态。有两种状态:
•基本状态: 这是组件的正常状态。不使用状态的组件处于基本状态。在本例中, 基本状态的 priceBox visible 属性为 true(默认)。这是当 instock 为 yes 时的情况。
•NoStockState: 这是当 instock 的值为 no 时的状态。处于这个状态时, 会执行 SetProperty 指令。target 属性决定了哪个类成员有问题, name 属性是目标上待更改属性的名称, value 是该属性的新值。
set data 函数通过查看 instock 的值决定要使用哪个状态:
currentState 是所有 UIComponent 控制的属性。它决定了哪个状态是活动状态。在状态之间切换时, Flex 框架从基本状态开始, 然后应用给定状态的规则。
注意: 请记住 itemRenderer 是循环使用的, 所以您必须始终恢复值;不要在 itemRenderer 中保留 if 而没有 else。
如果您感觉风险较打, 可以删除本例中的 set data 覆盖。使用数据绑定表达式在根标记中直接设置 currentState:
通过检查与根标记内联的 data.instock 来设置 currentState 的值-不错的伎俩, 但是可能较难维护。
在这个 itemRenderer 中, 仅当 instack 值为 yes时才显示价格和“购买”按钮。当然不使用状态也可以这样做, 但是, 如果 itemRenderer 要添加或删除更多控制, 状态更适合, 因为可以通过设置 itemRenderer 的 currentState 属性对控制外观轻松实现控制。
您使用状态添加一个标签, 告诉用户该商品已售空, 而不是简单地删除价格和 Button。以下是修改后的状态:
<mx:AddChild> 标记指明将 Label 添加到 priceBox 中。除了将 priceBox 的 visible 属性设置为 false, 再使用一条友好的消息替换它。
再次, 您可以将这个标签添加到 set data 函数中-或按原样添加它, 只需将它的可视性设置为 false 并在 set data 函数中将它更改为 true。但我认为您可以看到状态的值: 如果 instock 变为 no 条件的要求变得更复杂, 您只需调整 NoStockState;切换状态的 ActionScript 代码保持不变。
注意: 可以在 Flex Builder 的“设计”视图中修改状态。
本例不太适合 List 控制, 但十分适合 VBox 和 Repeater。当必须滚动列表时, 这个扩展适当位置项目的问题变得有些冒险。想象一下: 列表中的项目高度相同。现在扩展项目 2 的高度。目前进展顺利: 项目 2 比其他可见项目高。关键在这里: visible 项目。现在滚动列表。记住 itemRenderer 是循环使用的。所以当项目 2 滚出视图时, 它的 itemRenderer 将移到列表底部。必须重置它的高度。没问题, 这个相当简单。现在滚动列表, 使项目 2 重新回到视图中。它应该是扩展后的高度。itemRenderer 怎么知道要这样做? 通过之前的文章, 您知道信息来自数据本身或某些外部源。
我认为调整大小的 itemRenderer 太复杂, 并不值得这样做。我相信使用 VBox 和 Repeater 能以更好的方式做到这一点。但是, Repeater 的关键在于将创建每个子代。如果您有 1000 个记录并使用 Repeater, 您会获得 itemRenderer 的 1000 个实例。
对于本例, 您依然编写一个 itemRenderer, 但将它用作 VBox 的子代。列表元素看上去相当简单: 一本书籍的名称及其作者。但是单击 itemRenderer, 它会扩展到位。我们使用两种战术做到这一点:
•itemRenderer 有一种包含附加信息的状态。
•itemRenderer 使用一种 Resize 过渡, 为 itemRenderer 提供更平滑的扩展和收缩。
itemRenderer 的基本状态相当简单
ExpandedState 添加其他元素, 它们用于 itemRenderer 的高度:
使用 itemRenderer 更改大小就像添加过渡一样简单:
将它放在 <mx:states> 标记下。
每当状态更改时应用过渡, 因为状态的 fromState 和 toState 属性是通配符。现在您只需添加用于单击 itemRenderer(将一个 click 事件添加到根标记)的事件处理函数并更改状态:
状态是对 itemRenderer 的可视外观进行大量修改的好方法。您可以将多个更改归入一个 State, 然后设置 itemRenderer 的 currentState 属性就可以全部完成。
在下一篇文章中, 我们将讨论如何通过扩展 UIComponent 编写更高效的 itemRenderer。
itemEditor 是真正的交互控制, 但它们不是本文的重点。在这些示例中, 我将向您展示根据数据本身或用户操作更改可视外观的 itemRenderer。
Flex <mx:State> 是更改 itemRenderer 外观的一个理想方法。状态使用简便, 并且与过渡结合使用时, 可以为用户提供反馈和愉悦的体验。
在本例中, 您将为列表新建一个 MXML itemRenderer(记住, 如果您愿意, 完全可以使用 ActionScript 这样做)。这个 itemRenderer 显示图像、书名、作者、价格以及用于购买这本书籍的 Button。
<?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="/2006/mxml"> <mx:Image id="bookImage" source="{data.image}" /> <mx:VBox height="115" width="100%" verticalAlign="top" verticalGap="0" paddingRight="10"> <mx:Text text="{data.title}" fontWeight="bold" width="100%"/> <mx:Label text="{data.author}" /> <mx:HBox id="priceBox" width="100%"> <mx:Label text="{data.price}" width="100%"/> <mx:Button label="Buy" /> </mx:HBox> </mx:VBox> </mx:HBox>
但是, 您想要实现的是, 如果书籍售空(数据包含 <instock> 节点, 它们是 yes 或 no), 价格和“购买”Button 会消失。我为价格和 Button 的 HBox 父代增加了一个 id 属性, 使此处的编码更简单一些。这样, 我可以通过更改 HBox 和 priceBox 的可视性来更改那些项目的可视性。
通过覆盖 set data 函数可以这样做, 您将会这么做, 但不是直接更改 priceBox 的可视性, 而是使用以下状态定义:
<mx:states> <mx:State name="NoStockState"> <mx:SetProperty target="{priceBox}" name="visible" value="false"/> </mx:State> </mx:states>
将以下内容放在根 <mx:HBox> 标记下。
这个示例有些牵强, 因为它过于复杂, 不适合执行简单任务, 但它说明了如何使用状态。有两种状态:
•基本状态: 这是组件的正常状态。不使用状态的组件处于基本状态。在本例中, 基本状态的 priceBox visible 属性为 true(默认)。这是当 instock 为 yes 时的情况。
•NoStockState: 这是当 instock 的值为 no 时的状态。处于这个状态时, 会执行 SetProperty 指令。target 属性决定了哪个类成员有问题, name 属性是目标上待更改属性的名称, value 是该属性的新值。
set data 函数通过查看 instock 的值决定要使用哪个状态:
override public function set data( value:Object ) : void { super.data = value; if( data ) { if( data.instock == "yes" ) currentState = ""; else currentState = "NoStockState"; } }
currentState 是所有 UIComponent 控制的属性。它决定了哪个状态是活动状态。在状态之间切换时, Flex 框架从基本状态开始, 然后应用给定状态的规则。
注意: 请记住 itemRenderer 是循环使用的, 所以您必须始终恢复值;不要在 itemRenderer 中保留 if 而没有 else。
如果您感觉风险较打, 可以删除本例中的 set data 覆盖。使用数据绑定表达式在根标记中直接设置 currentState:
<mx:HBox xmlns:mx="/2006/mxml" width="400" currentState="{data.instock == 'yes' ? '' : 'NoStockState'}" >
通过检查与根标记内联的 data.instock 来设置 currentState 的值-不错的伎俩, 但是可能较难维护。
在这个 itemRenderer 中, 仅当 instack 值为 yes时才显示价格和“购买”按钮。当然不使用状态也可以这样做, 但是, 如果 itemRenderer 要添加或删除更多控制, 状态更适合, 因为可以通过设置 itemRenderer 的 currentState 属性对控制外观轻松实现控制。
您使用状态添加一个标签, 告诉用户该商品已售空, 而不是简单地删除价格和 Button。以下是修改后的状态:
<mx:states> <mx:State name="NoStockState"> <mx:SetProperty target="{priceBox}" name="visible" value="false"/> <mx:AddChild relativeTo="{priceBox}" position="before"> <mx:Label text="-- currently not in stock --" color="#73DAF0"/> </mx:AddChild> </mx:State> </mx:states>
<mx:AddChild> 标记指明将 Label 添加到 priceBox 中。除了将 priceBox 的 visible 属性设置为 false, 再使用一条友好的消息替换它。
再次, 您可以将这个标签添加到 set data 函数中-或按原样添加它, 只需将它的可视性设置为 false 并在 set data 函数中将它更改为 true。但我认为您可以看到状态的值: 如果 instock 变为 no 条件的要求变得更复杂, 您只需调整 NoStockState;切换状态的 ActionScript 代码保持不变。
注意: 可以在 Flex Builder 的“设计”视图中修改状态。
本例不太适合 List 控制, 但十分适合 VBox 和 Repeater。当必须滚动列表时, 这个扩展适当位置项目的问题变得有些冒险。想象一下: 列表中的项目高度相同。现在扩展项目 2 的高度。目前进展顺利: 项目 2 比其他可见项目高。关键在这里: visible 项目。现在滚动列表。记住 itemRenderer 是循环使用的。所以当项目 2 滚出视图时, 它的 itemRenderer 将移到列表底部。必须重置它的高度。没问题, 这个相当简单。现在滚动列表, 使项目 2 重新回到视图中。它应该是扩展后的高度。itemRenderer 怎么知道要这样做? 通过之前的文章, 您知道信息来自数据本身或某些外部源。
我认为调整大小的 itemRenderer 太复杂, 并不值得这样做。我相信使用 VBox 和 Repeater 能以更好的方式做到这一点。但是, Repeater 的关键在于将创建每个子代。如果您有 1000 个记录并使用 Repeater, 您会获得 itemRenderer 的 1000 个实例。
对于本例, 您依然编写一个 itemRenderer, 但将它用作 VBox 的子代。列表元素看上去相当简单: 一本书籍的名称及其作者。但是单击 itemRenderer, 它会扩展到位。我们使用两种战术做到这一点:
•itemRenderer 有一种包含附加信息的状态。
•itemRenderer 使用一种 Resize 过渡, 为 itemRenderer 提供更平滑的扩展和收缩。
itemRenderer 的基本状态相当简单
<mx:HBox width="100%"> <mx:Label text="{data.author}" fontWeight="bold"/> <mx:Text text="{data.title}" width="100%" fontSize="12" selectable="false"/> </mx:HBox>
ExpandedState 添加其他元素, 它们用于 itemRenderer 的高度:
<mx:states> <mx:State name="ExpandedState"> <mx:AddChild position="lastChild"> <mx:HBox width="100%"> <mx:Image source="{data.image}"/> <mx:Spacer width="100%"/> <mx:Label text="{data.price}"/> <mx:Button label="Buy"/> </mx:HBox> </mx:AddChild> </mx:State> </mx:states>
使用 itemRenderer 更改大小就像添加过渡一样简单:
<mx:transitions> <mx:Transition fromState="*" toState="*"> <mx:Resize target="{this}" /> </mx:Transition> </mx:transitions>
将它放在 <mx:states> 标记下。
每当状态更改时应用过渡, 因为状态的 fromState 和 toState 属性是通配符。现在您只需添加用于单击 itemRenderer(将一个 click 事件添加到根标记)的事件处理函数并更改状态:
<mx:Script> <![CDATA[ private function expandItem() : void { if( currentState == "ExpandedState" ) currentState = ""; else currentState = "ExpandedState"; } ]]> </mx:Script>
状态是对 itemRenderer 的可视外观进行大量修改的好方法。您可以将多个更改归入一个 State, 然后设置 itemRenderer 的 currentState 属性就可以全部完成。
在下一篇文章中, 我们将讨论如何通过扩展 UIComponent 编写更高效的 itemRenderer。
发表评论
-
Flex States 视图状态
2010-08-30 23:06 2199Flex States可以为组件定义多个视图状态,每一 ... -
flex中使用链接报告优化Module大小的测试
2010-08-18 20:51 1717最近使用PuerMVC和Module机制构建了一个界面和操作类 ... -
flex ToolTip专题
2010-06-03 12:46 47051 创建ToolTips 每一个可视化的Flex组件 ... -
pureMVC使用经验和建议
2010-06-03 11:00 1501下面是有经验的朋友分 ... -
pureMVC框架及其开发
2010-06-03 10:46 1196PureMVC框架的目标很明确 ... -
HTML页面加载和解析流程
2010-04-21 11:38 28751.用户输入网址(假设是个html页面,并且是第一次访问),浏 ... -
CSS参考手册
2010-04-21 11:02 918颜色与背景 •color •background-colo ... -
HTML参考手册( 标签、属性和事件)
2010-04-20 17:17 1556HTML标签 标签 描述 DTD <!--...- ... -
flex itemRenderer使用(五):效率
2010-04-17 17:01 1259如果您要显示大量 itemRe ... -
flex itemRenderer使用(三):通信
2010-04-17 14:51 1625在本系列的第 2 部分中, 我向您展示了如何使用 MXML 和 ... -
flex处理XML(一)基础
2010-04-15 15:24 1353FLEX处理XML,ECMAScript For XML(e4 ... -
flex itemRenderer使用(二)外部渲染器
2010-04-09 18:18 1658在本系列的第 1 部分中, 我向您展示了如何创建内联 item ... -
flex itemRenderer使用(一)内联渲染器
2010-04-09 17:50 1521Flex 提供许多控制, 它们 ... -
Flex Metadata Tag高级应用
2010-04-01 14:42 2445原文地址:http://livedocs. ... -
Flex Metadata Tag归纳总结
2010-04-01 14:25 1085Flex引入了元数据标签的概念,它告诉编译器如何编译这段 ... -
Flex和JS通信
2010-03-06 18:42 1773flex提供了和JS通信的方法,使用flexSDK中的Exte ... -
最近完成的某系统的报表组件
2010-01-20 21:12 2606最近做完了一个flex+java的项目,其中项目的主要特 ... -
Flex Chart组件的阴影去除
2009-12-21 10:52 2182去除Flex Chart组件的阴影有多种方法,最简单最直接的方 ... -
flex中==和===的区别(和java的==和equals类似但也有不同之处)
2009-12-21 09:44 4760===用于测试两个表达式 ... -
Flex中的Dictionary
2009-12-20 23:04 2514Dictionary 类用于创建属性的动态集合,该集合 ...
相关推荐
### Flex ItemRenderer 的详细教程 #### 一、ItemRenderer 概述 在 Flex 开发中,ItemRenderer 是一种非常强大的工具,它允许开发者...掌握 ItemRenderer 的使用方法将大大提高 Flex 应用程序的灵活性和功能多样性。
Flex中的itemRenderer是一种关键的组件渲染机制,它允许开发者自定义列表或数据集项的显示方式。在Flex应用中,特别是在处理数据集如...正确理解和运用itemRenderer,能够极大地提升Flex应用的用户体验和功能表现。
在描述中提到的博客链接(由于实际无法访问,此处无法提供具体内容),通常会包含关于如何创建和使用Flex ItemRenderer的教程或技巧。通常,一个教程可能会涵盖以下几点: 1. **创建ItemRenderer**: 你可以通过Flex...
本篇文章将深入探讨如何利用ItemRenderer实现一个灵活且功能丰富的相册示例,同时也会涉及Flex中的一些核心概念和编程技巧。 首先,我们需要了解ItemRenderer的基本结构。ItemRenderer是ActionScript类,通常继承自...
本文将深入探讨Flex中ItemRenderer的使用方法。 首先,我们需要理解ItemRenderer的基本概念。ItemRenderer是一个轻量级组件,用于呈现数据列表中的单一数据项。当数据提供者中的每一项数据都需要不同的外观或行为时...
在本文中,将首先介绍内联itemRenderer的概念和使用方法,然后探讨itemRenderer的设计目的和Flex框架中的重用机制。接着,会通过示例代码来展示如何创建和使用itemRenderer,以及如何根据数据动态地更改itemRenderer...
### 理解 Flex_itemRenderer #### 一、Flex_itemRenderer 概述 Flex_itemRenderer 是 Flex 框架中的一个重要概念,它主要用于定义列表、数据网格等控件中的每一项是如何呈现的。通过自定义 itemRenderer,开发者...
本文将深入探讨如何使用Flex4创建一个ItemRenderer,以实现类似雅虎聊天界面的效果,并介绍相关的核心概念和技术。 首先,让我们了解ItemRenderer的基本概念。ItemRenderer是Flex中的一种组件,它的主要任务是将...
本文将深入探讨Flex项呈示器(ItemRenderer)的概念、使用方法,以及如何根据需求定制它来展示用户信息,如头像和等级。 ## 一、Flex项呈示器(ItemRenderer)简介 Flex项呈示器是Adobe Flex框架中的一个组件,其...
在Flex手机项目开发中,创建自定义的List组件ItemRenderer是一项常见的需求,目的是为了提供更加丰富和个性化的显示效果。本文将深入探讨如何利用IconItemRenderer来实现这一目标,同时结合具体的实例,介绍两种不同...
Flex内联itemRenderer是Adobe Flex框架中的一种技术,用于...总之,掌握Flex内联itemRenderer的使用,对于提升Flex应用的用户体验和视觉效果至关重要。通过实践和探索,你可以创造出更加生动、交互丰富的数据展示效果。
- 使用数据绑定和皮肤状态减少运行时计算。 - 通过实现`IMeasure`接口优化ItemRenderer的测量性能,尤其是在大量数据的情况下。 6. **高级特性**: - 使用`data`属性访问绑定的数据,`index`属性获取数据项的...
综上所述,这个项目可能涉及到一个使用Flex DataGrid展示节目或课程播表的应用,播表数据存储在XML文件中,每个节目单元格通过自定义的ItemRenderer展现,可能包含Flash播放器,并且可以通过点击单元格触发页面跳转...
- **ListBase**:Flex 中所有列表控件的基类,提供了很多用于管理和操作列表项的功能。 #### 三、问题描述 具体来说,我们有一个名为 `MyHorizontalList` 的 HorizontalList 类型的组件,它具有以下特性: 1. **...
flex中经常会使用到渲染器,这里简要介绍一下渲染器的一些知识
- 定制ItemRenderer:根据需求,可以自定义单元格的显示样式,比如添加图片、链接或其他复杂UI元素。 - 响应式布局:考虑不同屏幕尺寸和设备类型,可能需要调整DataGrid的列宽和布局方式。 - 数据排序和过滤:...
首先,我们需要创建一个自定义的ItemRenderer类,该类继承自`mx.controls.listClasses.ListItemRenderer`或`spark.components.supportClasses.ListItemRenderer`(根据你使用的Flex SDK版本)。在ItemRenderer中,...
Flex是Adobe开发的开源框架,它允许开发者使用MXML和ActionScript语言创建交互式、响应式的Web应用。MXML是一种标记语言,类似于HTML,用于定义用户界面的结构和外观,而ActionScript则是用于处理逻辑和交互的脚本...
4. **MXML与ActionScript**:Flex应用可以使用MXML(标记语言)或者ActionScript(面向对象的编程语言)编写。在这个示例中,可能既包含MXML文件(用于界面布局和组件声明),也包含ActionScript文件(用于业务逻辑...
首先,我们了解一个基本概念:Flex的列表控件并不为每个数据项创建单独的渲染器实例。比如,如果你有一个包含1000条记录的列表,但只有10行在屏幕上可见,那么Flex只会创建足够的渲染器来展示当前和未来可能需要的...