XForms/条件操作
外观
< 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 新闻组上。