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]" />
此語法更可取,因為它更快,並且不需要轉義大於符號。