对itemrenderer的一些认知(3)-itemeditor
这篇就讲一下itemrenderer的兄弟itemeditor,因为要在DataGrid里的好几列显示用不同的components来修改数据,如果一上来全用itemrenderer当然可以做,但不太好看也太heavy了,所以用itemeditor来一起用就爽多了。之前对itemeditor的用法没有深究,原因是一直觉得他没什么不一样,后来仔细看了看,发现他还是很强大的,让我更愿意用他了。
首先,itemrenderer相对更固定,写好什么就是什么,adobe的本意应该也就是用他来显示,当然你也可以直接用control类的component,但就heavy了。itemeditor就更加灵活,是可动态编辑的的renderer,当你点击某个cell的时候,会触发itemEditBeginning/itemEditBeginevent这种cell editing events,这样就可以listen之后在方法中去编辑这个cell,比如直接更改data,把当前的Text换成ComboBox,这些特性就是我们想要的。
对于两者的区别大家可以参考:
http://www.adobe.com/devnet/flex/articles/itemeditors_pt1.html
http://blog.csdn.net/cfhacker007/article/details/5784505
http://hongweiwang1984.blog.163.com/blog/static/2726776200958104047426/, 我觉得写的还不错.
另外一点区别是itemrenderer的显示最好用labelFunction调整,而itemeditor就是不存在显示问题,因为本来就是编辑的区域,这里就不细说了,之前只用itemrenderer时搞了搞,有兴趣的同学可以自己看看。
两者在一起用是最好的,这样会更好看也效率也有保证。
下面例子就是两者一起用的,先用一个DataGridItemRenderer作为itemrenderer显示plain数据,当点击时,用itemeditor显示出一个Combobox或TextArea用于更改数据:
public class EditRenderer extends DataGridItemRenderer{public var datafieldname:String;private var bgColor :uint = 0xffffff;public function EditRenderer(){super();}override public function set data(value:Object):void {super.data = value;if(value){var curval:* = value[datafieldname];this.bgColor = 0xffffff;if(curval != ""){this.bgColor = 0x363636;this.background=true;}else{this.bgColor = 0xffffff;this.background = false;}}}override public function validateNow():void{ super.validateNow(); this.backgroundColor = bgColor; }}