`
yr512656630
  • 浏览: 321482 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

itemRenderer获取DataGrid对象

    博客分类:
  • flex
 
阅读更多
package com.hundsun.job.view.jobManager.jobNet
{
	import flash.events.Event;
	import flash.events.MouseEvent;

	import mx.containers.HBox;
	import mx.controls.Button;
	import mx.controls.listClasses.IListItemRenderer;
	import mx.core.IDataRenderer;
	import mx.core.UIComponent;
	import mx.events.FlexEvent;
	import mx.resources.ResourceManager;

	/**
	 * 解决大数据量下作业网列表页面中,操作按钮显示隐藏的性能提升情况。
	 * ItemRenderer性能优化
	 * @author yaorui
	 *
	 */
	public class JobNetListBtnRenderer extends HBox implements IListItemRenderer, IDataRenderer
	{
		private var _data:Object;

		//查看
		private var viewByBtn:Button;

		//设计
		private var viewDescBtn:Button;

		//执行
		private var activeBtn:Button;

		//停止
		private var stopBtn:Button;

		//删除
		private var delBtn:Button;

		public function JobNetListBtnRenderer()
		{
			super();
		}

		override protected function createChildren():void
		{
			super.createChildren();
			this.setStyle("horizontalAlign", "center");
			this.setStyle("paddingTop", "0");
			this.setStyle("paddingBottom", "0");
			this.setStyle("horizontalScrollPolicy", "middle");
			viewByBtn=new Button();
			viewByBtn.label="查 看";
			viewByBtn.enabled=true;
			viewDescBtn=new Button();
			viewDescBtn.label="设 计";
			viewDescBtn.enabled=true;
			activeBtn=new Button();
			activeBtn.label="执 行";
			activeBtn.enabled=true;
			stopBtn=new Button();
			stopBtn.label="停 止";
			stopBtn.enabled=true;
			delBtn=new Button();
			delBtn.label="删 除";
			delBtn.enabled=true;
			viewByBtn.addEventListener(MouseEvent.CLICK, viewBy);
			viewDescBtn.addEventListener(MouseEvent.CLICK, view);
			activeBtn.addEventListener(MouseEvent.CLICK, active);
			stopBtn.addEventListener(MouseEvent.CLICK, stopHandler);
			delBtn.addEventListener(MouseEvent.CLICK, remove);
			this.addChild(viewByBtn);
			this.addChild(viewDescBtn);
			this.addChild(activeBtn);
			this.addChild(stopBtn);
			this.addChild(delBtn);
		}

		private function viewBy(e:Event):void
		{
			owner.document.viewBy();
		}

		private function view(e:Event):void
		{
			owner.document.view();
		}

		private function active(e:Event):void
		{
			owner.document.active();
		}

		private function stopHandler(e:Event):void
		{
			owner.document.stopHandler();
		}

		private function remove(e:Event):void
		{
			owner.document.remove();
		}

		override protected function commitProperties():void
		{
			super.commitProperties();
			if (data)
			{
				//作业网异常,停止按钮和执行灰,处于运行中的设计不能看
				var str:String=ResourceManager.getInstance().getString("status", "btnEnabled");
				var arr:Array=str.split("&");
				var ctlStatu:String=data.ctlStatu.toString();
				var isVisible:String=data.isVisible.toString();
				for each (var strOne:String in arr)
				{
					var strStatus:String=strOne.split("|")[0];
					var strValue:String=strOne.split("|")[1];
					var status:Array=strStatus.split(",");
					var index:int=status.indexOf(ctlStatu);
					if (index != -1)
					{
						//存在状态
						var btnValue:Array=strValue.split(",");
						viewDescBtn.enabled=btnValue[2] == "true";
						//非外部作业网的特殊处理
						if (isVisible == "true")
						{
							stopBtn.enabled=btnValue[0] == "true";
							delBtn.enabled=btnValue[1] == "true";
							activeBtn.enabled=btnValue[3] == "true";
						}
						else
						{
							delBtn.enabled=true;
							activeBtn.enabled=false;
							stopBtn.enabled=false;
						}
						break;
					}
				}
			}
		}

		[Bindable("dataChange")]
		override public function get data():Object
		{
			return _data;
		}

		override public function set data(value:Object):void
		{
			_data=value;
			invalidateProperties();
			dispatchEvent(new FlexEvent("dataChange"));
		}
	}
}


通过owner.document.stopHandler()调用上层中写好的应用。
分享到:
评论

相关推荐

    DataGrid的itemRenderer and HeaderRenderer

    例如,可以使用`data`属性来获取当前行的数据对象,并根据数据对象的某个属性来决定`CheckBox`的选中状态。同时,我们还需要监听`CheckBox`的`change`事件,以便在用户更改选中状态时更新数据模型。 `...

    使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作

    通过这个对象,可以访问到DataGrid的所有列(columns),然后根据ListData对象的columnIndex属性,可以获取到对应的DataGridColumn对象。这个对象实例允许访问DataGrid中当前数据列的各种信息和属性。 总结来说,...

    flex datagrid中实现显示序列号

    你可以通过监听`dataGrid.dataProvider`的`collectionChange`事件,获取当前项的索引,然后将索引传递给`itemRenderer`。这样,`itemRenderer`就能显示正确的序列号。 ```actionscript myDataGrid.dataProvider....

    flex datagrid checkbox实现源码

    要获取选中行的行索引,可以监听DataGrid的`change`或`click`事件,然后通过事件对象的`itemIndex`属性获取。同时,还需要维护一个数据结构(如数组)来存储选中项,确保在数据源更新或排序后仍能正确反映用户的...

    Flex教程之DataGrid用法

    而在ActionScript中,创建`DataGrid`则需要通过编程的方式实例化对象并添加到舞台上。 ```actionscript DataGrid1 = new DataGrid(); DataGrid1.x = 10; DataGrid1.y = 30; DataGrid1.width = 250; addChild...

    Flex datagrid实例

    4. **DataGrid的itemRenderer**:在某些情况下,可能需要自定义DataGrid的项渲染器(itemRenderer)以展示复杂数据,例如在这里可能是包含复选框的自定义组件。项渲染器负责将数据对象转化为可视化的UI元素。 5. **...

    flex 映射DataGrid,修改DataGridColumn显示值

    接下来,我们需要在DataGrid中使用这个自定义的ItemRenderer。可以在`DataGridColumn`中指定`itemRenderer`属性: ```xml <mx:DataGrid id="dataGrid" dataProvider="{itemsXML.item}" width="386" x="10" y="10"> ...

    Flex DataGrid DataGridColumn数据颜色多样化-类型替换

    值得注意的是,DataGrid的数据提供者(dataProvider)是一个ArrayCollection,包含了两个对象,每个对象都有Key和Value属性,这与DataGrid的列对应。在实际应用中,数据提供者可能是从服务器获取的动态数据。 此外,...

    Flex技术经验和问题总结

    #### 六、获取DataGrid总数据行数 直接获取`DataGrid`的总数据行数并不直观,因为`DataGrid`并没有提供一个直接的属性或方法用于此目的。然而,可以通过设置`selectedIndex`属性大于实际数据行数的方式来间接获取...

    Flex 定制ItemRender详细解释

    - 使用`data`属性访问绑定的数据,`index`属性获取数据项的索引,`listData`属性获取有关列表的附加信息。 - 可以监听`render`事件,以便在渲染完成后执行额外的逻辑。 - 自定义ItemRenderer还可以包含交互性,...

    Flex动态生成可编辑的DataGrid具体实现代码

    不过,当需要在运行时获得已经渲染的组件实例时,常规方法可能无法直接获取到这个对象。通过不懈的努力和搜索,开发者找到了ClassFactory这个类工厂,它能够帮助开发者动态创建所需的组件实例。 从技术实现的角度来...

    flex的tree动态加载大量数据与滚动条相关问题探讨

    Flex框架对此提供了一定的优化机制,官方明确指出使用ItemRenderer的大数据控件,并不会一次创建所有数据列/行的显示对象。也就是说,Tree组件仅会创建在屏幕上可见的数据列/行,并且重复利用这些显示对象以提升运行...

    Flex试题 .txt

    在Flex中,可以使用DataGrid和List组件来展示文章列表,使用TextFlow和TextArea来编辑和显示文章内容。 ### 40. 在一个包含100个Flex项目的环境中,成功的关键是什么? 在这样一个复杂的环境中,成功的关键因素...

Global site tag (gtag.js) - Google Analytics