跳至内容

XForms/条件操作

来自维基教科书,开放的书籍,开放的世界

您希望根据 XPath 表达式有条件地执行操作。

我们将使用 XForms 1.1 规范中作为操作一部分的 if 属性。我们将设置一个事件,该事件将在实例变为空时触发。我们将创建一个操作并将 observer 属性设置为监视 people 实例中的更改。

以下是操作本身的代码


<xf:action
   ev:event="xforms-delete"
   ev:observer="people"
   if="not(person)">
        <xf:insert origin="instance('person-template')" context="."/>
</xf:action>

这表示监视 people 实例,如果 people 实例中没有人员,则使用 person-template 实例插入一个人。

<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xf="http://www.w3.org/2002/xforms"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema-datatypes"
    xmlns:ev="http://www.w3.org/2001/xml-events">
  <head>
    <title>Test of populating a repeat if it becomes empty</title>

    <xf:model id="m">
      <xf:instance id="people">
        <people xmlns="">
          <person>
            <name>John</name>
            <email>[email protected]</email>
          </person>
          <person>
            <name>Bethany</name>
            <email>[email protected]</email>
          </person>
        </people>
      </xf:instance>

      <xf:instance id="person-template">
        <person xmlns=""><name/> <email/></person>
      </xf:instance>
    </xf:model>
  </head>

  <body>        
    <h1>Test of populating a repeat if it becomes empty</h1>

    <xf:group ref="instance('people')">
      <xf:repeat nodeset="person">
        <xf:input ref="name"><xf:label>Name: </xf:label></xf:input><br/>
        <xf:input ref="email"><xf:label>Email address: </xf:label></xf:input>

        <xf:trigger>
          <xf:label>Delete</xf:label>

          <xf:delete ev:event="DOMActivate" nodeset="."/>
        </xf:trigger>
      </xf:repeat>

      <xf:action ev:event="xforms-delete" ev:observer="people"
                 if="not(person)">
        <xf:insert origin="instance('person-template')" context="."/>
      </xf:action>
    </xf:group>
  </body>
</html>

此示例由 John L. Clark 于 2008 年 12 月 10 日发布在 Mozilla XForms 新闻组上。


下一页: 绑定到多个实例 | 上一页: 选择和取消选择事件
主页: XForms
华夏公益教科书