IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

XForms 技巧: 结合使用 Ajax 与 XForms

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论

样例代码


级别: 中级

Nicholas Chase (ibmquestions@nicholaschase.com), 自由撰稿人, Backstop Media

2007 年 4 月 02 日

Asynchronous JavaScript™ and XML 或者说 Ajax 在目前的 Web 领域引起轰动,因为借助它,Web 设计人员可以创建出不必重新加载整个页面就能响应用户操作的应用程序,XForms 本身已具备这项功能。这篇技巧分别考察了 XForms 和 Ajax 版本以及如何将两种技术结合起来。现在有很多资料说明如何实际发出 Ajax 请求,但是对于如何使用返回的数据,XForms 提供了一些特殊的挑战和机遇。
请访问 Ajax 资源中心,这个一站式信息交换中心提供了关于 Ajax 编程模型的文章和教程、讨论论坛、blog、wiki、活动和新闻。如果有的话,都能从这里找到。

开始之前:关于本技巧

这篇技巧针对特定任务。关于 XForms 的背景信息,请参阅系列文章 XForms 专题

本技巧中使用的 XForms 例子经过了测试,在 Firefox 1.5(安装有 XForms 扩展)和 Microsoft® Internet Explorer 6(安装有 Formsplayer 控件)上均能运行。下载 包括用于 Firefox 的 XHTML 文件和用于 IE 的 HTML 文件。





回页首


应用程序

XForms 提供了自己的 Ajax 版本,无需替换整个页面就能修改定义页面内容的数据。例如,假设页面收集了一些牛仔名言。实例文档可能如清单 1 所示。


清单 1. 实例数据

<pearls>
 <pearl>
 Never ask a barber if he thinks you need a haircut.
 </pearl>
 <pearl>
 Making it in life is kind of like busting broncos. You're 
going to get thrown a lot. The simple secret is to keep getting 
back on.
 </pearl>
 <pearl>
 Never miss a good chance to shut up.
 </pearl>
 <pearl>
 The quickest way to double your money is to fold it over and 
put it back in your pocket.
 </pearl>
</pearls>

可以建立清单 2 所示的窗体。


清单 2. 窗体

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ev="http://www.w3.org/2001/xml-events" 
xmlns:xforms="http://www.w3.org/2002/xforms">
 <head>
 <title>Instance Data-To-XHTML/XForms Example</title>
 <xforms:model id="model_pearls">
 <xforms:instance id="instance_model_pearls" src="wisdom.xml"/>
 <xforms:submission id="submit_model_pearls" 
 action="http://localhost/newwisdom.xml"
 method="post" replace="instance"
 instance="instance_model_pearls"/>
 </xforms:model>
 <link href="gen_default.css" rel="stylesheet"/>
 </head>
 <body>
 
<h1>Cowboy Wisdom</h1>
 
 <xforms:output id="thePearl" ref="/pearls/pearl[2]" 
 model="model_pearls" />

 <xforms:submit submission="submit_model_pearls">
 <xforms:label>Get new sayings</xforms:label>
 </xforms:submit>
 </body>
</html>

结果如图 1 所示。


图 1. 基本页面
基本页面

请注意,output 元素的 ref 属性是一个包含位置的 XPath 语句。通过控制该 XPath 语句。就能控制页面的外观。

也能通过控制实际数据来控制页面。您可能还注意到,清单 1 中的粗体文本是关于 submission 元素的信息。这里告诉 XForms 引擎不需要替换页面,而是替换特定的实例。发出对该 URL 的请求,将返回数据不同的相同结构,从而立即得到新数据。比如,如果单击 Submit 按钮,浏览器加载另一篇文档,并且由于 output 语句设置为总是在同一位置进行查找,就会使用该位置的数据填充窗体,如图 2 所示。


图 2. 更换页面的一部分
更换页面的一部分




回页首


必须使用脚本的情况

无论是否愿意,有时候必须使用 JavaScript。也许必须在使用数据之前以某种方式通知要处理的数据,或者数据来自不能控制的站点。一种办法是使用 JavaScript 检索数据然后添加到页面中。

关键是了解不能像普通的 HTML 页面那样直接向元素添加数据。而必须将信息放到实例中,然后处理指定 XForms 控件内容的 XPath 表达式。

下面的例子通过在页面中增加了一个按钮来说明这一点(如清单 3 所示)。


清单 3. 添加脚本

...
 <body>
 
<h1>Cowboy Wisdom</h1>
 
 <script type="text/javascript">
 var whichPearl = 0;
 function choosePearl(){
 if (whichPearl == 0) {
 whichPearl = 1;
 } else if (whichPearl == 1) {
 whichPearl = 2;
 } else if (whichPearl == 2) {
 whichPearl = 3;
 } else if (whichPearl == 3) {
 whichPearl = 0;
 }
 refString = "/pearls/pearl["+whichPearl+"]";
 theTarget = document.getElementById("thePearl");
 theTarget.setAttribute("ref", refString);
 }
 </script>
 
 
 <xforms:output id="thePearl" ref="/pearls/pearl[2]" 
 model="model_pearls" />

 <form>
 <input type="button" value="Change saying" 
 onclick="choosePearl();" />
 </form>

 <xforms:submit submission="submit_model_pearls">
 <xforms:label>Get new sayings</xforms:label>
 </xforms:submit>
 </body>
</html>

函数本身很简单,循环使用几个数值。在实际的应用程序中,这些脚本可用于发送 Ajax 请求和处理返回的数据。对每个索引值,可以为 thePearl 元素的 ref 属性创建新的文本。

下面添加 from which 函数来调用该脚本。重新打开网页就能看到新增加的按钮,还可以单击该按钮。每次单击它的时候,ref 属性就会改变,网页自动修改数据来和 XPath 语句匹配,如图 3 所示。


图 3. 新脚本
新脚本




回页首


结束语

XForms 已经提供了某些类似 Ajax 的功能,比如在不重新加载页面的情况下修改其中的数据。另一方面,如果必须借助脚本,则可以操纵定义了 XForms 窗体外观的 XML 数据,从而根据外部数据进行任何修改。






回页首


下载

描述名字大小下载方法
Ajax XForms samplesxforms_ajax_source.zip4KBHTTP
关于下载方法的信息


参考资料



关于作者

Nicholas Chase 曾经参与多家公司的网站开发,包括 Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers。Nick 曾经做过高中物理教师、低放射性废弃设备管理员、在线科幻杂志的编辑、多媒体工程师、Oracle 教员以及一家交互通信公司的首席技术官。他出版了多部著作,包括 XML Primer Plus(Sam's)。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款