XUL教程:实例构建XBL组件

本文配套源码

原文标题:XUL Tutorial - Bindings - XBL Example

原文作者:Neil Deakin

原文地址:http://www.xulplanet.com/tutorials/xultu/xblex.html

下面是对原文的翻译:

这节将介绍一个XBL的完整例子。

幻灯片元素(A Slideshow Element)

让我们构建一个完整的使用XBL元素的例子,这是一个保存了一组对象的组件,而每页只会显示其中一个。置于下方的导航按钮用于循环显示这些对象,而在一个文本框中会显示当前的页号。你可以向页面添加任何元素,当然最好是一组图片,我们给这个组件起名叫做“幻灯片”元素。

首先,我们要决定哪些元素需要通过XBL的匿名内容显示。因为要实现翻页效果,所以使用deck元素来作为容器可能再合适不过了。循环显示的内容要 在XUL文件中定义,而不是在XBL中,但我们要把这些内容插入到XBL的deck中,这个操作会利用到children元素。在下方,我们需要添加两个 按钮用来分别显示上一页和下一页,还有一个文本组件(译者注:其实是一个label)用来显示页号。

实例11.8.1: 源代码

<binding id="slideshow">
<content>
<xul:vbox flex="1">
<xul:deck xbl:inherits="selectedIndex" selectedIndex="0" flex="1">
<children/>
</xul:deck>
<xul:hbox>
<xul:button xbl:inherits="label=previoustext"/>
<xul:label flex="1"/>
<xul:button xbl:inherits="label=nexttext"/>
</xul:hbox>
</xul:vbox>
</content>
</binding>

这个绑定项建立了我们需要的幻灯片结构。很多元素中都被添加了flex特性,这样他们就能自动进行布局。两个按钮上的label特性是从绑定元素上继承过来的,分别对应于各自需要的特性,previoustext和nexttext,这样就可以方便的修改按钮上显示的文字。XBL绑定项所关联到的元素的子元素将被显示在deck元素下面。selectedIndex是从元素上继承下来的特性,这样我们就能在XUL中设置初始显示的页面。

下面的XUL文件用来构建要显示的结果。

<box class="slideshow" previoustext="Previous" nexttext="Next" flex="1">
<button label="Button 1"/>
<checkbox label="Checkbox 2"/>
<textbox/>
</box>

样式表也不能少:

.slideshow {
-moz-binding: url("slideshow.xml#slideshow");
}

第一个按钮“Button 1”对应于deck中的第一页,由于没有给label组件设置值,所以label组件没有显示出来,我们当然可以为其设置一个值,但是在后面我们将会对其更多的操作。

接下来,我们将添加一个用于保存页号的属性,而这个属性从deck的selectedIndex特性中获取值,这个值对应的就是当前的页号。同样 的,我们也可以对这个属性进行修改,它将同步修改deck上的selectedIndex特性。另外,文本组件需要在页号发生改变的时候实时进行更新。

<property name="page"
onget="return parseInt(document.getAnonymousNodes(this)[0].childNodes[0].getAttribute('selectedIndex'));"
onset="return this.setPage(val);"/>

page属性的值来自于匿名内容数组的第一个元素。因为第一个元素返回的是vbox元素,所以为了获取deck元素,我们需要取vbox的第一个子 元素。这时候没有使用获取匿名内容的方法,是因为对于vbox来说deck在DOM中已经是可见的啦。总之最后我们获取的哦了selectedIndex 特性的值。为了修改当前的也号,我们需要增加一个setPage方法,这个方法将在下面定义。

在向前和向后按钮上需要增加oncommand事件处理程序,这就样可以在切换页面的时候修改页号。在这里这个操作很方便,因为我们只需要对刚刚添加的page属性进行修改就可以了:

<xul:button xbl:inherits="label=previoustext"
oncommand="parentNode.parentNode.parentNode.page--;"/>
<xul:description flex="1"/>
<xul:button xbl:inherits="label=nexttext"
oncommand="parentNode.parentNode.parentNode.page++;"/>

时间: 2024-09-17 21:15:14

XUL教程:实例构建XBL组件的相关文章

XUL教程:对XBL元素进行扩展

本文配套源码 原文标题:XUL Tutorial - Bindings - XBL Inheritance 原文作者:Neil Deakin 原文地址:http://www.xulplanet.com/tutorials/xultu/xblinherit.html 下面是对原文的翻译: 在这一小节,我们将学习如果对已有的XBL定义进行扩展. 继承(Inheritance) 有时你要建立的组件可能和现有的某个组件很相似,比如你想建立一个可以弹出菜单的按钮,一种方法是重复造车轮,复制现有的butto

XUL教程:为XBL元素定义特性

原文地址:http://www.xulplanet.com/tutorials/xultu/xblatin.html 原文作者:Neil Deakin 以下是对原文的翻译: XBL特性继承(XBL Attribute Inheritance) 在这个小节我们将学习特性的继承方式. 继承的特性(Inherited Attributes) XBL可以让我们把复杂组件的实际实现方法隐藏起来.但是用目前为止介绍的功能,我们只能使用同样的方法建立匿名内容.如果我们可以通过为绑定元素增加特性,来修改内部的元

XUL教程:为XBL元素定义内容

本文配套源码 原文:http://www.xulplanet.com/tutorials/xultu/xblcontent.html 原文作者:Neil Deakin 下面是对原文的翻译: 匿名内容(Anonymous Content) 在这一小节,我们将探讨如何使用XBL建立内容. XBL Content XBL可以被用来向一个元素中添加一组元素.在XUL中只需要定义最外层的元素,而里面的元素都可以在XBL中定义.对于开发那些由一系列元素组成 的组件(widget)来说,这是再好不过的功能,只

XUL教程:为XBL元素定义属性

原文标题:XUL Tutorial - Bindings - Adding Properties 原文作者:Neil Deakin 原文地址:http://www.xulplanet.com/tutorials/xultu/xblprops.html 下面是对原文的翻译: 添加属性(Adding Properties) 在这一节,我们将学习怎样为XBL元素增加自定义属性. XBL接口 通过JavaScript和DOM,可以对元素的属性进行访问.在XBL中,你可以为元素自定义属性,当然也可以为元素

XUL教程:为XBL元素定义方法

原文标题:XUL Tutorial - Bindings - Adding Methods 原文作者:Neil Deakin 原文地址:http://www.xulplanet.com/tutorials/xultu/xblmethods.html 以下是对原文的翻译: 接下来我们学习如何向XBL中定义的元素添加方法. 方法(Methods) 既然可以向XBL定义的元素添加属性,自然就可以添加方法,这些方法可以在脚本中调用.方法表现为对象的函数,比如"window.open()".你可

XUL教程:为XBL元素定义事件

原文标题:XUL Tutorial - Bindings - Adding Events 原文作者:Neil Deakin 原文地址:http://www.xulplanet.com/tutorials/xultu/xblevents.html 下面是对原文的翻译: 这一节,我们来学习如何向XBL元素中添加事件处理程序. 事件处理程序(Event Handlers) 正如你所期望的,匿名内容里的元素支持鼠标点击.键盘按下等事件.但你可能会想采用一种特别方式触发事件和处理程序.如果需要,你可以向匿

Eclipse开发经典教程之常用SWT组件

在介绍组件之前,有必要介绍一下Control类.Control类是一个抽象类,它是所有窗口组 件(即在Windows中能获得句柄的部件)的基类. Control类的继承关系 Control类是为继承而设计的,所有窗口组件都继承于Control类,如图1所示. 开发经典教程之常用SWT组件-swt组件"> 图1 Control类的继承关系 Control的一个实例代表Windows中的一个窗口组件,它中有窗口名柄属性,但是在程序中 不能够直接访问. Control类的常用方法 Control

AJAX教程实例,ASP+AJAX+ACCESS数据库应用教程(附源码)

access|asp+|数据|数据库|ajax教程 AJAX教程实例[阿里西西原创]  其实说起AJAX的初级应用是非常简单的,通俗的说就是客户端(javascript)与服务端(asp或php等)脚本语言的数据交互. 看完本篇ajax实例教程,我相信你也可以轻松做出一个初级的AJAX应用. 你也可以直接访问:http://www.alixixi.com/web/web/ajax/jiaocheng.html预览此篇ajax教程的源码示例. 好,下面我们就始一步步让你了解AJAX+ASP基础应用

ASP入门教程-使用计数据组件

页面计数器 (Page Counter) 组件用于统计每个网页被访问的次数,该组件定期把统计的数据存入服务器磁盘上的一个文本文件---------访问次数统计数据文件中,所以在停机或出现错误信息时,当前数据也不会丢失. 1.创建页面计数器组件的实例对象 页面计数器组件包含在 pagecnt.dll 文件中.当使用 Server.CreatObject 方法在一页上创建页面计数器组件对象的实例时,此对象从中心管理对象中为指定的 Web 页获取其当前的访问次数,然后就可以使用此对象已有的方法来操作了