除了作为ZK组件,XHTML组件集的实现与其它的组件集[53]有某些不同,这样会更容易将传统的XHTML页面融入ZK。
ZK加载器会为在ZUML页面内声明的每个标签创建一个ZK组件。例如,在下面的ZUML页面内创建了四个组件(html,body, p 和 label
)。
<html> <body> <p>Hi</p> </body> </html>
优点是你可以动态改变任何组件的内容:
<p id="info">Hi</p> <z:button onClick="info.detach()" xmlns:z="http://www.zkoss.org/2005/zk"/>
但是,这会消耗更多的处理时间,且会需要更多的内存来容纳这些组件,所以,如果页面的一部分是静态的,你可以按如下方式使用Native命名空间。
<n:html xmlns:n="http://www.zkoss.org/2005/zk/native"> <n:body> <p id="info">Hi</p> <z:button onClick="info.detach()" xmlns:z="http://www.zkoss.org/2005/zk"/> </n:body> </n:html>
参考性能提示一章获取更多信息。
传统的servlets和JavaScript 代码通常依赖于id属性,所以XHTML组件的UUID与ID是相同的。因此,开发人员不需要更改已存在的代码来适应ZK,如下所示。
<img id="which"/> <script type="text/javascript"><![CDATA[ //JavaScript and running at the browser function change() { var el = document.getElementById("which"); el.src = "something.gif"; } ]]></script> <zscript><!-- Java and running at the server --> void change() { which.src = "another.gif"; } </zscript>
注意,UUID是不可变的,并且与组件的ID没有任何关系,而不是XHTML(Notice that UUID is immutable and nothing to do with ID for components other than XHTML)。因此,在上面的例子中,若使用了XUL组件则会失败。若你真想在JavaScript 中使用XUL组件,则必须使用EL表达式获取正确的UUID。
<input id="which"/> <script type="text/javascript">//Running at the browser var el = document.getElementById("${which.uuid}"); el = $e("${which.uuid}"); //$e() is an utility of ZK Client Engine </script>
不同于XUL或其它组件集,在XHTML组件集中没有无效的XML元素。ZK使用org.zkoss.zhtml.Raw
类用于构造任何未经认证的xml元素[54]。因此,开发人员可以使用目标浏览器支持的任意标签,不管ZK组件是否实现了它们。
类似的,你可以使用Raw
组件来创建任何在XHTML组件集中没有定义的组件,如下。
new Raw("object"); //object could be any tag name the target browser supports