原文标题:XUL Tutorial - Bindings - Adding Methods
原文作者:Neil Deakin
原文地址:http://www.xulplanet.com/tutorials/xultu/xblmethods.html
以下是对原文的翻译:
接下来我们学习如何向XBL中定义的元素添加方法。
方法(Methods)
既然可以向XBL定义的元素添加属性,自然就可以添加方法,这些方法可以在脚本中调用。方法表现为对象的函数,比如“window.open()”。你可以通过method元素为你自己的元素添加自定义方法。下面介绍添加方法的语法:
<implementation>
<method name="method-name">
<parameter name="parameter-name1"/>
<parameter name="parameter-name2"/>
.
.
.
<body>
-- 在这里编写方法的脚本代码 --
</body>
</method>
</implementation>
方法也是在implementation元素内部定义的,就像字段和属性的定义方式一样。method元素包含两种类型的子元素:parameter元素用来描述方法的参数,body元素用来包含脚本的代码。
name特性的值对应于方法的名称。同样的,parameter元素上的name特性对应于每个参数的名称。每个parameter元素对应于一个方法的参数。具体来说,如果方法有3个参数,那么就会有3个parameter元素相对应。如果方法本身没有参数,那就不用定义任何parameter元素。
body元素包含方法调用时要执行的脚本。参数的名称对应于脚本中的变量,就像真的是从参数传递过来一样。比如把下面这个JavaScript函数放在XBL中可能就是接下来的样子:
function getMaximum(num1,num2)
{
if (num1<=num2) return num2;
else return num1;
}
XBL:
<method name="getMaximum">
<parameter name="num1"/>
<parameter name="num2"/>
<body>
if (num1<=num2) return num2;
else return num1;
</body>
<method>
这个叫做getMaximum的函数,可以用来比较两个数的大小,要比较的数会通过参数传递给方法。注意那个小于符号被替换成,要不然会和标签的起 始符号发生混淆。同样可以把整段代码包含在CDATA块中。你可以通过使用类似“element.getMaximum(5,10)”这样的的代码来调用 这个方法,element就是包含getMaximum方法的XBL元素的一个引用。
可以使用parameter标签为方法定义参数。因为Mozilla使用JavaScript作为自己的脚本语言,而且JavaScript是一种弱类型语言,所以不用为参数定义类型。当然在以后,其他语言可能也会和XBL联合使用。
访问匿名内容(Accessing the Anonymous Content)
你一定遇到过要修改匿名内容里某些元素的情况,可是这些元素既然是匿名建立的,用常规访问DOM的方法是不可以的。因为开发者不需要知道他们是怎么 实现的,只要知道他们是做什么的就可以,所以他们对于开发者来说是隐藏的。但实际上确实有特殊俄方法可以操作匿名内容里的元素。
使用XBL描述行为的元素有一个特别的数组属性,保存了所有的匿名子元素。数组中的每一项对应于XBL元素下的一个子元素。这个属性不可以直接访问,必须使用document的getAnonymousNodes方法来间接访问:
var value=document.getAnonymousNodes(element);
在这里,element;必须设置为包含你要访问的匿名内容的元素的引用,这个函数返回一个元素数组,对应的就是匿名内容里的yu俺素。这时如果 要使用哪个元素,直接使用DOM的方法就可以啦,因为对于开发者这些元素现在已经是可见的了。需要注意的是,存在XBL元素嵌套的情况,这时候你可能需要 使用两次getAnonymousNodes函数。
下面的例子建立一行的按钮:
<binding id="buttonrow">
<content>
<button label="Yes"/>
<button label="No"/>
<button label="Sort Of"/>
</content>
</binding>