`
yunzhongxia
  • 浏览: 647423 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

外部渲染器上

    博客分类:
  • flex
阅读更多

您应该还记得我说过, 应该将内联 itemRenderer 视作单独的类。事实上, Flex 编译器提取这些内联代码并为您创建类。内联 itemRenderer 的优势在于代码与列表位于同一位置, 但是如果 itemRenderer 变得复杂时, 这又变成了劣势。本文中我将向您展示如何自己创建类。

将 itemRenderer 提取到一个外部文件有几个优势:

  • itemRenderer 可轻松用于多个列表中
  • 代码更容易维护
  • 可以使用 Flex Builder 的“设计”视图草拟出最初的 itemRenderer

MXML itemRenderer

在第 1 部分中, 您看到有一个复杂的 itemRenderer 用于 DataGrid:

<mx:DataGridColumn headerText="Title" dataField="title">
		<mx:itemRenderer>
			<mx:Component>
				<mx:HBox paddingLeft="2">
					<mx:Script>
					<![CDATA[
						override public function set data( value:Object ) : void {
							super.data = value;
							var today:Number = (new Date()).time;
							var pubDate:Number = Date.parse(data.date);
							if( pubDate > today ) setStyle("backgroundColor",0xff99ff);
							else setStyle("backgroundColor",0xffffff);
						}
					]]>

					</mx:Script>
					<mx:Image source="{data.image}" width="50" height="50" scaleContent="true" />
					<mx:Text width="100%" text="{data.title}" />
				</mx:HBox>
			</mx:Component>

		</mx:itemRenderer>
	</mx:DataGridColumn>

 

itemRenderer 基于 HBox, 包含一个 Image 和一个 Text, 并且根据项目记录的 pubDate 字段设置背景色。可以使用以下步骤将同一 itemRenderer 编写为一个外部文件:

  1. 如果您使用 Flex Builder, 请新建一个 MXML Component 文件 (我将我的文件命名为 GridColumnSimpleRenderer, 您可以随意命名), 将根标记设置为 HBox。不必担心大小。
  2. 如果您只使用 SDK, 请新建一个 MXML 文件 (将它命名为 GridColumnSimpleRenderer.mxml), 将根标记设置为 HBox

在文件打开时, 复制 <mx:HBox></mx:HBox> 之间的所有内容, 但不要复制那些标记, 因为文件中已有它们。结果应该如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
	<mx:Script>
	<![CDATA[
		override public function set data( value:Object ) : void {
			super.data = value;
			var today:Number = (new Date()).time;
			var pubDate:Number = Date.parse(data.date);
			if( pubDate > today ) setStyle("backgroundColor",0xff99ff);
			else setStyle("backgroundColor",0xffffff);
		}
	]]>

	</mx:Script>
	<mx:Image source="{data.image}" width="50" height="50" scaleContent="true" />
	<mx:Text width="100%" text="{data.title}" />
</mx:HBox>

 

  • 保存此文件。
  • 现在修改 DataGridColumn 定义, 方法是删除内联 itemRenderer 并将它替换为以下内容:

    <mx:DataGridColumn headerText="Title" dataField="title"
    itemRenderer="GridColumnSimpleRenderer">

     

    现在运行这个应用程序。您会大吃一惊。因为行很高。这是因为 itemRenderer 上的 height="300"

    决定 itemRenderer 的宽度和高度

    List 控制始终设置 itemRenderer 的宽度。本例中将忽略明确的 width="400"。您应当编写自己的 itemRenderer, 假设用户更改列或列表宽度是宽度会更改。

    高度则是另一回事。如果列表设置了明确的 rowHeight, 它会将这个高度强加到各行, 忽略您对 itemRenderer 设置的任何高度。但是, 如果您将列表的 variableRowHeight 属性设置为 true, 则列表会慎重考虑 itemRenderer 的高度。在本例中, 高度明确设置为 300, 所以各行为 300 像素高。

    要修复它, 请从 itemRenderer 文件中删除明确高度, 应用程序即可正确运行。

    动态更改 itemRenderer

    本例覆盖了 set data() 函数以检查数据并设置 itemRenderer 的 backgroundColor。这十分常见。覆盖 set data() 使您能截取为新行更改数据的时间, 并且您可以作出样式更改。

    常见错误为:

    • 忘记调用 super.data = value;。这是致命错误-它会把 itemRenderer 弄乱。
    • 忘记重置样式 (如果任何测试失败)。当 pubDate 是将来时, 可能只设置颜色会比较诱人, 但您必须记住, itemRenderer 是循环使用的, 所以 else 语句很有必要。
    分享到:
    评论

    相关推荐

      flex中渲染器简介

      比如,如果你有一个包含1000条记录的列表,但只有10行在屏幕上可见,那么Flex只会创建足够的渲染器来展示当前和未来可能需要的可视行,通常会额外创建一些作为缓冲。这意味着,当用户滚动列表时,原有的渲染器会被...

      VRay[1].Adv.1.5.RC3.渲染器汉化版

      《VRay 1.5 RC3 渲染器汉化版详解》 在计算机图形学领域,渲染器作为核心组件,对于最终图像质量和效果起着决定性的作用。VRay,由 Chaos Group 开发,是一款广泛应用的高质量渲染软件,广泛应用于建筑设计、电影...

      vray 渲染器2008

      综上所述,V-Ray 1.5 SP1渲染器在2008年为3ds Max用户带来了强大的渲染能力,无论是在光影模拟、材质编辑、纹理应用,还是在相机设置和后期处理方面,都极大地提升了3D创作的专业性和效率。这个版本的V-Ray至今仍被...

      Go-FauxGL纯Go实现的3D软件渲染器

      Go-FauxGL是一个完全用Go语言编写的3D软件渲染器,它不依赖于传统的图形库如OpenGL,也不包含任何C语言的扩展。这使得它成为学习和理解3D图形编程,以及在Go环境中实现图形渲染的一个独特资源。在这个项目中,开发者...

      外部关联表格的某一个字段的值来符号化一个图层

      6. **应用渲染器**:最后将创建好的渲染器应用到图层上,完成基于人口值的符号化工作。 #### 示例代码解读 提供的部分代码展示了如何创建并应用一个基于唯一值的渲染器来符号化图层的过程。关键步骤包括: - 初始...

      19.3 LVGL使用外部SRAM.rar

      这个“19.3 LVGL使用外部SRAM”主题主要关注如何在资源有限的嵌入式设备上,利用LVGL库将图形渲染的数据存储到外部SRAM(Static Random-Access Memory)中,以提高性能和扩展内存空间。 首先,我们需要了解SRAM的...

      基于c++控制台的3D第一人称射击(FPS)游戏,项目包含软件渲染器、游戏引擎层、游戏逻辑层【c++大作业】

      【作品名称】:基于c++控制台的3D第一人称射击(FPS)游戏,项目包含软件渲染器、游戏引擎层、游戏逻辑层【c++大作业】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大...

      mentalray独立渲染器教程.pdf

      ### mentalray独立渲染器教程知识点解析 #### 一、mental ray独立版本介绍 - **mental ray简介**:mental ray是一款高性能的渲染引擎,被广泛应用于电影特效、建筑可视化及产品设计等多个领域。它以其强大的光线...

      像素:简单HTML画布像素艺术渲染器

      像素 :alien_monster: 一个简单HTML画布像素艺术渲染器。快速开始添加到项目包含在您HTML中。 &lt; script src =" path/to/pixels.js " &gt; &lt;/ script &gt;创建调色板调色板是有效颜色字符串的数组。 const ...

      threejs给模型添加外部轮廓demo

      在"outline_demo_mine"这个文件中,可能包含了实现以上步骤的代码示例,例如加载模型、创建和配置轮廓、以及设置渲染器的代码片段。你可以通过查看和学习这些代码来理解具体实现细节,并根据自己的需求进行调整。 ...

      retro-ngon:用于HTML5画布的软件3D渲染器。 使用强大的复古效果栅格化n面多边形。 具有:简化的API,pixelvertex着色器,异步渲染,文档等

      请注意,尽管渲染器本身可以运行,但这些示例可能无法在Apple操作系统上运行。 特征 简单的API 真正的复古美学 可选的像素和顶点着色器 可选的异步Web Worker渲染 模块化设计-轻松覆盖核心渲染器功能 单文件可分发...

      vue使用three.js引入外部obj,mtl模型.zip

      为了在网页上展示这个3D模型,还需要设置场景、相机和渲染器。通常,我们会在`init()`方法中创建这些: ```javascript const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window....

      stage.gl:迷你WebGL渲染器模板

      `stage.gl`是一个迷你WebGL渲染器模板,主要针对JavaScript开发人员,它提供了一个简洁的基础框架,用于快速搭建WebGL应用。在WebGL技术中,它扮演着简化和加速开发过程的角色,帮助开发者避免从零开始构建复杂的...

      documentation.pdf

      这些内容对于技术开发者来说尤为重要,因为它们将决定渲染器是否能在用户的系统上正确运行。 ### 使用方法 文档会介绍Mitsuba渲染器的基本使用方法,包括交互式前端的使用、命令行接口的使用、网络渲染、参数传递...

      io_export_blend_to_renderer:Blender Addon将Blender场景导出到不同的渲染器

      Blender插件以用于外部渲染器的格式导出Blender场景文件。 与Blender 2.79兼容的插件。 外部渲染器 PBRT 将选定的网格,灯光,摄像机导出为PBRT v3场景格式。 成分 特征 网格 所有选定的网格都将导出到models目录...

      VirtualReality:适用于MATLAB的Virtual Reality渲染器

      标题提到的"VirtualReality:适用于MATLAB的Virtual Reality渲染器"正是这个工具箱的一个实例,它允许用户创建和探索虚拟世界,同时进行数据可视化和实验模拟。 MATLAB中的Virtual Reality渲染器是一个强大的组件,...

      pdfrenderer:客户端PDF渲染器

      客户端PDF渲染器 增强客户端PDFKit: 添加HTML原语,例如h1,h2,h3,p,img,br,hr,表。 可以采用一个SimpleSchema,对其进行解析并呈现。 支持国际化。 可以渲染外部图像或CollectionFS中的图像。 支持常规...

    Global site tag (gtag.js) - Google Analytics