在flex中项目渲染器是很重要的一种渲染手段

问题1:如何在应用程序中单击某一个Item,获取该Item的值

效果图如下,点击“视频”Item时,弹出“视频”两个字

两个解决办法

办法一:

在自定义的ItemRenderer组件的Click事件中分发事件

dispatchEvent(new Event("itemClick", true));

注意后面的true,此处表示取用事件冒泡,这一点非常重要!!

在调用自定义ItemRenderer组件的应用程序文件中,添加监听事件

addEventListener("itemClick",onItemClick); 

接着定义onItemClick方法

private function onItemClick(event:MyEvent):void
{
    Alert.show((event.target as ItemRenderer).data.txt);
}

如果在自定义的ItemRenderer组件中没有取用事件冒泡的话,event.target的类型就不为ItemRenderer了,呵呵。

方法二:

自定义事件MyEvent

package events
{
    import flash.events.Event;
    
    public class MyEvent extends Event
    {
        private var _data:Object;
        
        public function MyEvent(type:String, data:Object=null, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
            this._data = data;
        }
        public function get data():Object
        {
            return this._data;
        }
        public function set data(data:Object):void
        {
            this._data = data;
        }
    }
}

在自定义ItemRenderer组件的Click事件中分发事件

dispatchEvent(new MyEvent("itemClick", data.txt, true));

注意这里将data.txt数据也添加到分发的事件参数里面去了

当然在这个自定义ItemRenderer组件文件中要声明itemClick是一个事件

<fx:Metadata>
    [Event(name="itemClick",type="events.MyEvent")]
</fx:Metadata>

在调用自定义ItemRenderer组件的应用程序文件中,添加监听事件

addEventListener("itemClick",onItemClick); 

接着定义onItemClick方法

private function onItemClick(event:MyEvent):void
{
    Alert.show(event.data as String);    
}

OK,搞定!

问题2:如何动态修改某个Item的值

实现的效果图如下。

本例采用的是ArrayList作为数据源绑定的方法,并且该ArrayList是有Object组成的

[Bindable]
private var arr:ArrayList = new ArrayList();

arr.addItem({src:'assets/images/f_menu_34.png', txt:'新闻'});
arr.addItem({src:'assets/images/f_menu_36.png', txt:'网页'});
arr.addItem({src:'assets/images/f_menu_38.png', txt:'贴吧'});
arr.addItem({src:'assets/images/f_menu_40.png', txt:'知道'});
arr.addItem({src:'assets/images/f_menu_42.png', txt:'MP3'});
arr.addItem({src:'assets/images/f_menu_44.png', txt:'图片'});
arr.addItem({src:'assets/images/f_menu_46.png', txt:'视频'});
arr.addItem({src:'assets/images/f_menu_48.png', txt:'地图'});

在编译的时候,会发出一些警告

大致是说object不是IEventDispatcher类型的,不能绑定属性src和txt

也就是说当我们动态改变src和txt值的时候,系统是不会自动更新的

肿么办呢?

两个解决方法

方法一:

使用ObjectProxy代理类代理Object对象

arr.addItem(new ObjectProxy({src:'assets/images/f_menu_34.png', txt:'新闻'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_36.png', txt:'网页'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_38.png', txt:'贴吧'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_40.png', txt:'知道'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_42.png', txt:'MP3'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_44.png', txt:'图片'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_46.png', txt:'视频'}));
arr.addItem(new ObjectProxy({src:'assets/images/f_menu_48.png', txt:'地图'}));

在button的Click事件中修改Item的值即可

private function changeValue(event:MouseEvent):void
{
    arr.getItemAt(int(textInput.text)).txt = textInput2.text;
}

方法二:

既然说object不是IEventDispatcher类型的,我们现在就构造一个继承IEventDispatcher类型的类CustomMenu

package
{
    
    import flash.events.EventDispatcher;
    
    [Bindable]
    
    public class CustomMenu extends EventDispatcher
    {
        public var src:String;
        public var txt:String;
    }
    
}

构造数据源

[Bindable]
private var arr:ArrayList = new ArrayList();

var cm:CustomMenu = new CustomMenu(); 
cm.src = 'assets/images/f_menu_34.png';
cm.txt='新闻';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_36.png';
cm.txt='网页';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_38.png';
cm.txt='贴吧';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_40.png';
cm.txt='知道';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_42.png';
cm.txt='MP3';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_44.png';
cm.txt='图片';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_46.png';
cm.txt='视频';
arr.addItem(cm);
cm = new CustomMenu(); 
cm.src = 'assets/images/f_menu_48.png';
cm.txt='地图';
arr.addItem(cm);

同样在button的Click事件中修改Item的值即可

private function changeValue(event:MouseEvent):void
{
    arr.getItemAt(int(textInput.text)).txt = textInput2.text;
}

搞定,,睡觉

转载于:https://www.cnblogs.com/gisland/archive/2011/09/24/2188311.html

Flex中ItemRenderer项目渲染器的两个重要问题相关推荐

  1. Flex组件的项目渲染器(ItemRenderer)使用总结

    系列文章导航 Flex,Fms3相关文章索引 Air版免费视频成人聊天室,免费网络远程视频会议系统((Flex,Fms3联合打造)) Flex中提供了大量用于数据呈现的组件,这其中,以List系列组件 ...

  2. Android App开发手机阅读中PDF文件渲染器的讲解及使用(附源码 简单易懂)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.PDF文件渲染器 Android集成了PDF的渲染操作,从很大程度上方便了开发者,这个PDF文件渲染器便是PdfRenderer.渲染器允许从存储 ...

  3. maya 中切换当前渲染器的方法和设置

    切换渲染器 主流渲染器有 arnold,vray,redshift 使用脚本为 import maya.cmds as cmdscmds.setAttr('defaultRenderGlobals.r ...

  4. python中实现上下文管理器的两种方法

    上下文管理器: python中实现了__enter__和__exit__方法的对象就可以称之为上下文管理器 实现方法一举例: def File(object): def __init__(self, ...

  5. Java中BorderLayout布局管理器的两种排列实现方式

    java中Frame类默认的布局管理器为BorderLayout,其主要是将Frame窗口分为东西南北中五个区域,每个区域仅限于放一个组件,如加入多个,前免得会被覆盖,解决方法为:可以在一个区域中加入 ...

  6. matlab三角形分割,MATLAB 2014b及以上版本中带有画家渲染器的三角形拆分补丁

    在解决实际问题之前,这是一个值得怀疑的解决方法: 对角线只是三角形之间的空白区域,所以我们看到的是补丁后面的白色空间.愚蠢的想法: 让我们用匹配的颜色填充该空间而不是白色. 为此,我们将复制所有对象, ...

  7. C4D中使用Redshift渲染器翻转贴图

    1.勾选UV标签中的 Mirror U (或者 Mirror V) 2.对应在Offset 的U值中(当勾选Mirror U时,在第二个值中)填写1 说明:官网对 Mirror U(Mirror V) ...

  8. 自定义 Spark item 的渲染器

    在 DAtaGroup , SkinnableDataContainer 或它们的子类中定义自己的项目渲染器可以控制数据项的显示外观,数据项的外观包括字体.背景色.边界和其他的可视方面.项目渲染器也可 ...

  9. [转]HDR渲染器的实现(基于OpenGL)

    http://dev.gameres.com/Program/Visual/3D/HDRTutorial/HDRTutorial.htm 作者:何咏(欢迎和大家交流,我的QQ:35574585,Ema ...

最新文章

  1. 如何将 CentOS迁移到 AlmaLinux?
  2. PHP 接口开发注意事项
  3. python socket清空接受区_用Python制作只属于你和ta的聊天渠道吧
  4. 关于知识图谱,我们接下来该研究什么?斯坦福教授们给出了答案
  5. php析构函数使用,php析构函数__destruct()使用方法及实例讲解
  6. 我的ELK搭建笔记(阿里云上部署)
  7. python编辑器和python解释器的区别_python编译器和解释器的区别
  8. 快过年了,用JS让你的网页放烟花吧
  9. WebBrowser页面与WinForm交互技巧(转)
  10. NO.170 六问禅道1:为什么任务的剩余工时不自动更新?
  11. 10月1日 记录下os.path.dirname(__file__)使用
  12. SAP QM数据库表清单
  13. 【项目管理】 --- 范围说明书的内容和作用
  14. 活前缀及构造活前缀的DFA
  15. 网站开发-php开发手机论坛(11)-用户中心
  16. Flutter夜神模拟器调试及Vscode开发
  17. 七月集训(22,23)字典树,有序集合
  18. 去年这时候辞职一个,不算辞退算是自动劝退2个程序员,不知道他们是否还是在当程序员,大家可以借鉴
  19. 基础知识redis详解--【Foam番茄】
  20. 电子邮件服务器名设置方法,电子邮件 outlook express 怎样设置电子邮件服务器名?...

热门文章

  1. 请用旧版的 Scala-2.11 搭配 Spark-2.4.8 / hadoop-2.7
  2. Ubuntu 18.04 Server必须使用netplan命令配置IP地址
  3. GDAL C#版本 安全透明方法问题解决方案
  4. Netty使用kryo序列化传输对象
  5. 【STL】List基础
  6. CDH中hue使用oozie调度的文件注意事项
  7. Kylin之Caused by :...The table :DWD_ORDER_INFO Dup key found
  8. IntelliJ IDEA激活破解有效方法
  9. 后台权限html,cms后台权限架构.html
  10. java panel边框_java – 如何在jPanel上设置边框?