XForms 与 XML 的紧密集成使查看基于 XML 的 API 产生的结果非常方便。同时,XForms 功能非常强大,使用它能创建根据变化条件做出相应操作的动态界面。本文通过实例探讨了如何应用这些功能。在实例中,我们创建了一个动态搜索引擎客户机,该客户机提供了不同的选项并能根据搜索引擎的选择显示不同的数据。
清单 1. XML 数据结构,第 1 部分
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" <head> <xforms:instance id="box"> <xforms:bind nodeset="instance('box')/site" <xforms:instance id="teoma"> |
很显然,这个 XHTML 的独到之处应该就是在 HTML 标记中使用了 xmlns:y="urn:yahoo:srch"。这与 Yahoo 搜索的数据实例有关。Yahoo 使用 xmlns="urn:yahoo:srch" 返回搜索数据。因为 Yahoo 只识别这个特定的名称空间,所以我们在引用其数据时也必须使用该名称空间;否则,将显示为“不可见(invisible)”。后面我们将看到所有引用 Yahoo 搜索结果的 XForms 代码都使用了在头部指定的 y:。(记住,前缀是什么无关紧要;真正起作用的是名称空间。)此处的实例定义中,为搜索结果的 XML 数据节点了调用了名称空间。
box 实例同时包含了基本信息(2)和站点特定的信息(appid、site 和 results)。我们将根据引擎元素的值控制站点特定信息的外观。比方说,绑定元素指定了只有当引擎为“Yahoo”时,site 和 results 元素才会“关联(relevant)”在一起。稍后,当我们创建真正的表单时,会发现尽管这些项都在页面上,但是只有关联项才会在页面上显示出来。使用 submitYahoo 和 submitTeoma 元素可以类似地控制 Submit 按钮的可见性。
还有一个相当细微的地方需要注意,稍不注意便有可能影响到其后的设计。如 清单 1所示,三个实例的名称分别为 box、yahoo 和 teoma。请记住,这些名称都是特定于这些实例数据结构的。并不能把它们当做标识符随意使用。在本例后面的 switch/case/toggle 机制中重用 teoma 和 yahoo 这两个 ID 会是个不小的诱惑,但是由于它们的名称都引用了实例数据所以并不能正常运行。
……


