对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 = 9 this.toolTip = labelStr; this.setStyle("textAlign", "left"); this.alpha = 0.8; }
但是也不要过度使用,本来itemrenderer就是一个会拖performance的东西,用的不谨慎甚至会stackoverflow.
相关推荐
yangkang 2020-11-09
alien 2020-11-15
ChlatZed 2020-11-11
远远的山 2020-11-09
xysoul 2020-11-03
onepiecedn 2020-10-29
lnkToKing 2020-10-29
ChlatZed 2020-10-27
谢恩铭 2020-10-23
yuanye0 2020-10-15
liverlife 2020-10-10
somyjun 2020-09-29
xiaoying 2020-09-28
kunyus 2020-09-25
dusuanyun 2020-09-21
newisI 2020-09-01
afanti 2020-09-14