XForms/禁用触发器
外观
< XForms
在表格的每一行或列表的每一项上都有一个特定的删除触发器。如果列表中只剩下一个项目,您想要禁用删除(按钮)触发器。
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
<title>Disable Delete Trigger</title>
<xf:model>
<xf:instance id="my-instance" xmlns="">
<data>
<item>Item 1</item>
<item>Item 2</item>
<item>Item 3</item>
</data>
</xf:instance>
<xf:instance id="views" xmlns="">
<data>
<item-delete-trigger />
</data>
</xf:instance>
<!-- display the delete button only if there is a second item -->
<xf:bind id="item-delete-trigger"
nodeset="instance('views')/item-delete-trigger"
relevant="instance('my-instance')/item[2]"/>
</xf:model>
</head>
<body>
<xf:repeat nodeset="instance('my-instance')/item" id="item-repeat">
<xf:input ref=".">
<xf:label>Item: </xf:label>
</xf:input>
<xf:trigger bind="item-delete-trigger">
<xf:label>Delete</xf:label>
<xf:delete nodeset="instance('my-instance')/item[index('item-repeat')]"
ev:event="DOMActivate" />
</xf:trigger>
</xf:repeat>
<xf:trigger>
<xf:label>Append</xf:label>
<xf:action ev:event="DOMActivate">
<xf:insert nodeset="instance('my-instance')/item" at="last()" position="after" />
<!-- set the value to the item count -->
<xf:setvalue ref="instance('my-instance')/item[last()]"
value="concat('Item ', count(instance('my-instance')/item))" />
</xf:action>
</xf:trigger>
<xf:trigger bind="item-delete-trigger">
<xf:label>Delete Selected Row</xf:label>
<xf:delete nodeset="instance('my-instance')/item[index('item-repeat')]"
ev:event="DOMActivate" />
</xf:trigger>
</body>
</html>
此示例使用两个命名实例。my-instance 是将与表单一起提交的数据。views 实例仅用于将表单视图与一些逻辑绑定。这是在绑定语句中完成的。
<xf:bind id="item-delete-trigger"
nodeset="instance('views')/item-delete-trigger"
relevant="count(instance('my-instance')/item) > 1" />
这意味着项目删除触发器应该只在存在多个项目时才存在。
尽管以上逻辑上是正确的,但实际上没有必要计算所有项目并进行比较。如果存在第二个项目,您可以启用触发器。
<xf:bind id="item-delete-trigger"
nodeset="instance('views')/item-delete-trigger"
relevant="instance('save-data')/item[2]" />
此语法更可取,因为它更快,并且不需要转义大于符号。