InSync06:增加“松耦合”UI同步事件通知

一、运行DEMO:
1、运行程序:http://localhost:8400/spring-flex-testdrive/insync04/index.html;
2、单击Search按钮,从数据库获取所有的联系人。
3、在Search文本框输入几个字符,单击“Search”按钮,按名字来查找联系人。
4、双击DataGrid里的某个联系人,打开独立的Tab。
5、修改联系人的first name或last name,单击“Save”。注意到DataGrid会自动更新。
6、加入一个新的联系人,单击“Save”创建一个新联系人。注意到这个新联系人将会显示在DataGrid中。
7、删除一个联系人,注意到这个联系人为从DataGrid中被移除。

二、理解代码:
1、insync06.mxml:

在每新建一ContactForm Tab时,即添加监听:
var form:ContactForm = new ContactForm();
form.addEventListener(ContactEvent.CREATED, contactCreatedHandler);
form.addEventListener(ContactEvent.UPDATED, contactUpdatedHandler);
form.addEventListener(ContactEvent.DELETED, contactDeletedHandler);
tn.addChild(form);
form.contact = contact;
tn.selectedChild = form;
这三个事件处理都调用search()方法,重新刷新程序。
private function contactCreatedHandler(event:ContactEvent):void
{
    search();               
}
search()即:ro.findByName(searchStr.text);

2、ContactForm.mxml

ContactForm使用<fx:Metadata>定义了三个事件, 
    <fx:Metadata>
        [Event(name="contactCreated", type="ContactEvent")]
        [Event(name="contactUpdated", type="ContactEvent")]
        [Event(name="contactDeleted", type="ContactEvent")]
    </fx:Metadata>
当创建、更新和删除返回时,即派发这些事件。如:
dispatchEvent(new ContactEvent(ContactEvent.CREATED, contact));   
dispatchEvent(new ContactEvent(ContactEvent.UPDATED, contact));   
dispatchEvent(new ContactEvent(ContactEvent.DELETED, contact));

注:

<fx:Metadata>:

使用 <fx:Metadata> 标签可以在 MXML 文件中插入 metadata 标签。Metadata 标签为 Flex 编译器提供了描述在 Flex 应用程序中如何使用 MXML 组件的信息。Metadata 标签不会被编译为可执行代码,但提供了用于控制如何编译相应的代码部分的信息。

[Event(name="mxml控件事件的名称", type="事件的类型")]

dispatchEvent是ContactForm从父类中继承下来派发事件的方法。

3、ContactEvent.as:
自定义的事件类型,从Event下继承。

package
{
    import flash.events.Event;

public class ContactEvent extends Event
    {
        public static const CREATED:String = "contactCreated";
        public static const UPDATED:String = "contactUpdated";
        public static const DELETED:String = "contactDeleted";
        public var contact:Contact;
        public function ContactEvent(type:String, contact:Contact, bubbles:Boolean = true, cancelable:Boolean = false)
           {
               this.contact = contact;
            super(type, bubbles, cancelable);
        }
    }
}

三、小结:

本DEMO与之前的DEMO不同的之处,在于使用事件同步更新UI中的控件。当联系人被创建、更新或者删除时,ContactForm派发事件。程序中的其它组件作为监听者注册这些事件,当联系人被创建、更新或删除时,按指定的任务处理。在这种情况下,主程序作为监听者注册这些事件,刷新联系人的DataGrid反映在ContactForm里做的改变。

来自:http://blog.sina.com.cn/s/blog_67532f7c0100ot2p.html

案例学习BlazeDS+Spring之八InSync06“松耦合”UI同步事件通知相关推荐

  1. 案例学习BlazeDS+Spring之一(

    BlazeDS4的一个亮点就是与Spring的集成,这大大简化了与FLASH与JEE的集成开发.通过理解BlazeDS4附带的那些精湛的小DEMO,可以很快速的掌握这门技术.虽然案例学习这种方式不太利 ...

  2. 案例学习BlazeDS+Spring之二Spring BlazeDS Integration 101

    Spring BlazeDS Integration 101 这展示BlazeDS+Spring最基本的DEMO. 一.运行DEMO: 1.运行应用程序,URL:http://localhost:84 ...

  3. 案例学习BlazeDS+Spring之十一:Simple Data Push

    Simple Data Push 这个简单的数据推送服务demo演示了如何使用消息服务,将数据从服务端推送到客户端.在服务端,一个JAVA组件发布一个模拟真实的值给订阅了此消息目标的FLEX客户端.这 ...

  4. 案例学习BlazeDS+Spring之三InSync01查找联系人

    InSync01:查找联系人 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex-testdrive/insync01/index.html: 2.单 ...

  5. 案例学习BlazeDS+Spring之五InSync03强类型

    InSync03:强类型 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex-testdrive/insync03/index.html: 2.单击S ...

  6. 案例学习BlazeDS+Spring之九Company Manager

    Company Manager 该DEMO与InSync是类似的,提供公司信息的CRUD操作.但CompanyManager使用注释来进行定义.也展示了对象关联(CompanyDAO类与Industr ...

  7. 案例学习BlazeDS+Spring之十:Chat(

    Chat: 该DEMO展示的是BlazeDS的消息服务,是一个使用发布/订阅者模式的简单聊天室. 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex- ...

  8. 案例学习BlazeDS+Spring之十二:Traderdesktop

    Traderdesktop: 这是一个更为复杂的数据推送demo,它演示了如何使用主题来有选择的订阅指定消息.在这种情况下,用户可以仅订阅指定的股票更新消息.在服务端,Java组件发送模拟的市场数据到 ...

  9. 案例学习BlazeDS+Spring之四InSync02使用RemoteObject事件

    InSync02:使用RemoteObject事件 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex-testdrive/insync02/inde ...

最新文章

  1. UVA11437 Triangle Fun(相似三角形,做辅助线求解相似比例)
  2. 重磅!谷歌刚刚发布Objectron新数据集,可完美检测3D目标,超过4百万幅图像和15K视频剪辑!...
  3. mysql floor报错_mysql的floor()报错注入方法详细分析
  4. python udp创建addr_python高级:8.socket通信part1
  5. ubuntu server 10.04 LTS(64位)装不了花生壳的解决方法
  6. 搜索引擎利用机器学习排序
  7. Angular的@Output与@Input理解
  8. 信息学奥赛一本通 2028:【例4.14】百钱买百鸡
  9. jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。
  10. 【ACL2020】基于语境的文本分类弱监督学习
  11. php 获取扩展函数,获取php扩展函数
  12. 那些我们想当然的错误[SQL]
  13. 谷歌chrome浏览器 - 关于插件,这一篇就够了
  14. 翻译之:数据页面和数据行
  15. BZOJ 4816[SDOI2017]数字表格(莫比乌斯反演)
  16. python Pygame库介绍和使用,基本游戏开发
  17. CUDA + cuDNN + tensorflow-gpu 安装
  18. 人生感悟人生是一场修行
  19. ios 通讯录 通过电话号码 查询姓名
  20. QPainter 保存自绘制为图片

热门文章

  1. sql还原数据库备份数据库_如何获取SQL数据库还原历史记录
  2. mvc中嵌入ssrs报表_如何在SSRS报表中过滤多维OLAP多维数据集
  3. SQL Server FILESTREAM数据库损坏和修复
  4. 洛谷 P3396 哈希冲突 解题报告
  5. 通过Mybatis获取mysql表中重复记录的方法
  6. 关于自动装箱和自动拆箱
  7. oracle经典面试题以及解答
  8. 抢购 mysql 优化_处理抢购、秒杀应用场景降低“超卖”发生几个优化方案(php)...
  9. 浅谈Spring中JDK动态代理与CGLIB动态代理
  10. OpenCV 离散傅里叶变换