但在项目渲染器中添加了自定义状态后,默认状态会覆盖原有状态,保留不了新增状态,因而会出现项目渲染器界面错乱的问题(如实例中第一个MX DataGrid)。怎么解决这一个问题呢?
首先要找到问题所在,幸好Flex SDK是开源的,我们可以很方便地查看源码。打开ItemRenderer.as,找到getCurrentRendererState()方法。查看其注释,提到很重要的一点:如果所需的行为与默认行为不同,则ItemRenderer的子类必须覆盖此方法以返回值。再查看ItemRenderer子类MXAdvancedDataGridItemRenderer和MXItemRenderer的源码,根本就没有getCurrentRendererState()重载该方法。这就导致在MX DataGrid和MX AdvancedDataGrid添加项目渲染器状态会出问题。但在Spark组件中添加状态没有这个问题,因为它们用的是ItemRenderer基类。
明白了这个原理,问题也就迎刃而解了。在自定义的渲染器组件中添加如下面的代码:
代码如下 | 复制代码 |
override protected function getCurrentRendererState():String |
为什么不加上返回默认状态的代码呢?那是因为项目渲染器的子类会继承父类的状态,因此返回currentState的值其实已经包含了返回默认状态值,当然也包括了新增的自定义状态值。
点击此处查看该实例最终效果,点击此处下载该实例的源码。
使用MXItemRenderer主要是为了兼容MX组件,建议尽量使用相应的Spark组件来代替。当然对于MX AdvancedDataGrid和MX Tree,大家也不用太担心,这个问题只在Flex 4.0/4.1中存在,Flex 4.5及其以上版本已经重写了ItemRenderer类,不存在这个问题
创造与魔法 安卓版v1.0.0750
创造与魔法是一款开放世界手游,在游戏中玩家可探索这个奇妙的世
创造与魔法修改版 最新版v1.0.0750
创造与魔法无限点券版是款探索冒险游戏,该款游戏的操作还是蛮自
战争与文明官方版本 安卓版v1.7.16
战争与文明是一款由上海邮通科技有限公司开发的战争策略游戏,这
迷你世界0元领皮肤无限迷你币版 最新安卓版v1.43.0
迷你世界0元购买皮肤版是这款开放沙盒冒险建造游戏的特殊破解版
创造与魔法无限经验版 安卓版v1.0.0750
创造与魔法无限经验版是款可以改造环境,整个游戏的自由度还是蛮