热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

BroadcastersandObserversinXUL

我们已经知道在XUL中,像按钮这样的元素可以通过连接到command元素来响应事件,这样做的一个好处就是实现了界面与脚本的分离。如果有多个界面元素需要响应相同的事件,

     我们已经知道在XUL中,像按钮这样的元素可以通过连接到command元素来响应事件,这样做的一个好处就是实现了界面与脚本的分离。如果有多个界面元素需要响应相同的事件,比如,在日常开发中,我们经常会让某个菜单项、工具栏按钮和快捷键响应同一样事件,我们可以定义一个command元素,在该元素中指定oncommand属性为处理事件的函数,然后将这些需要响应这一相同事件的所有元素添加command属性,并将其值指定为command元素的id,如下所示:


<command id&#61;"cmd_sayhello" label&#61;"Say Hello" oncommand&#61;"alert(&#39;Hello&#39;)" />
<keyset><key id&#61;"key_sayhello" key&#61;"j" modifiers&#61;"control shift" command&#61;"cmd_sayhello" />
keyset>
<hbox><button id&#61;"btn_sayhello" command&#61;"cmd_sayhello" /><button type&#61;"menu" label&#61;"File"><menupopup><menuitem command&#61;"cmd_sayhello" />menupopup><button><checkbox command&#61;"cmd_sayhello" />
hbox>

     上述代码段中定义了一个command元素&#xff0c;其中oncommand属性指定了响应命令的代码&#xff0c;接着定义了一个快捷键、一个普通按钮、一个菜单按钮和一个复选框&#xff0c;并都指定command属性为command元素的id&#xff0c;即cmd_sayhello。所以所有这些元素的命令响应都是弹出一个消息框并显示Hello。另外&#xff0c;command的元素除了id元素的所有属性都被这些元素所共享。在上述代码中&#xff0c;并没有指定按钮和菜单等的文本&#xff0c;但它们都统一继承了command元素的label属性&#xff0c;所以它们的文本显示都为Say Hello。如果将command元素的disabled属性设置为true&#xff0c;则所有与它连接的XUL元素都自动无效&#xff0c;即拥有了相同的disabled属性。

     与command元素非常类似的一个元素是broadcaster&#xff0c;broadcaster元素也用于属性值的传递&#xff0c;两者的不同之处在于&#xff1a;command元素主要应用定义动作(action)&#xff0c;而broadcaster则用于在定义状态(state)。broadcaster元素被定义在broadcasterset元素中&#xff0c;类似于key元素被定义在keyset元素中一样。通过为broadcaster元素指定id以使它能够被其它元素引用。 

   observer是需要监视broadcaster状态的元素。如果某元素希望成为某个broadcaster的观察者&#xff0c;仅仅需要为它添加observes属性&#xff0c;并将该属性值指定为需要监视的broadcaster元素的id即可。最简单的情况如下所示&#xff1a;


<broadcasterset><broadcaster id&#61;"isOffline" label&#61;"Offline"/>
broadcasterset>
<button id&#61;"offline_button" observes&#61;"isOffline"/>


    在该代码块中&#xff0c;id为offline_button的按钮元素成为了id为isOffline的broadcaster元素的观察者&#xff0c;所以该按钮也拥有了标签文本"Offline"&#xff0c;如果任何脚本改变了broadcaster中的label值&#xff0c;按钮中的标签文本也会跟着改变。

   你可以为同一个broadcaster添加任意多个观察者&#xff0c;不过最好是多于一个&#xff0c;不然也失去了broadcaster元素的使用意义。默认情况下它监视broadcaster的除id和persist的所有属性&#xff0c;并在这些属性值发生改变时进行自身状态更新。如果需要监视指定的属性&#xff0c;则可以通过observers元素来实现&#xff0c;如下所示&#xff1a;


<broadcasterset><broadcaster id&#61;"colorChanger" style&#61;"color: black"/>
broadcasterset><button label&#61;"Test"><observes element&#61;"colorChanger" attribute&#61;"style" onbroadcast&#61;"alert(&#39;Color changed&#39;);"/>
button><button label&#61;"Observer"oncommand&#61;"document.getElementById(&#39;colorChanger&#39;).setAttribute(&#39;style&#39;,&#39;color: red&#39;);"
/>

    observes元素被置于观察者的标签之内&#xff08;成为了它的子元素&#xff09;&#xff0c;

    实际上&#xff0c;任何元素都可以成为一个broadcaster&#xff0c;并通过observers属性来引用。如果需要引用多于一个的属性&#xff0c;则在button元素中再添加一个observes元素&#xff0c;并将attribute属性修改为需要观察的其他属性即可。

   onbroadcast属性用来定义观察的属性发生改变时的响应事件。


 

转:https://www.cnblogs.com/cmleung/archive/2010/04/20/1716250.html



推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
夜凄凉2502887267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有