读书人

对itemrenderer的一些认知(二)-与父容

发布时间: 2012-11-23 00:03:43 作者: rapoo

对itemrenderer的一些认知(2)-与父容器的交互
在编写itemrenderer时,会有时候用到与父容器的交互的需求,实现的方法不难

比如在一个datagrid里,相邻的行之前的数据属性有联系,这里给一个例子是上一行的背景颜色是下一行的决定的:

override public function set data(value:Object):void {super.data = value; this.dataProvider = null;//在data setter里调用自己写的方法checkActionSelect();}public function checkActionSelect():void{        ?currentOwner = new DataGrid();         //获取父容器,这里是DataGrid         currentOwner = owner as DataGrid;        //取出父容器的dataProvider,这里是arraycollection         currentOwnerDataProvider = currentOwner.dataProvider as ArrayCollection;         //取出这行data在父容器的dataprovider里的index         index = currentOwnerDataProvider.getItemIndex(data);         //这里就可以得到下一行的数据了,index + 1就行         var obj:Object = currentOwnerDataProvider.getItemAt(index + 1);         //根据下一行的数据来改变颜色         if(obj.selectedAction == "Approved"){         this.setStyle("chromeColor", "green");         }else if(obj.selectedAction == "Rejected"){         this.setStyle("chromeColor", "red");         }else this.setStyle("chromeColor", "white");}



另外再提一下validateNow()这个方法,如果想要重画这个itemrenderer,可以override这个方法,当然你也可以用invalidate系列方法去做,但如果你不是对这个itemrenderer掌控那么细致,validateNow()就相对方便,比如:

override public function validateNow():void{super.validateNow();this.y += 7;this.x += 5;this.backgroundColor = 0xcccccc;this.wordWrap = true;this.height = 40;this.width = 9this.toolTip = labelStr;this.setStyle("textAlign", "left");this.alpha = 0.8;}


但是也不要过度使用,本来itemrenderer就是一个会拖performance的东西,用的不谨慎甚至会stack overflow.

读书人网 >Web前端

热点推荐