跳转到内容

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) &gt 1" />

这意味着项目删除触发器应该只在存在多个项目时才存在。

尽管以上逻辑上是正确的,但实际上没有必要计算所有项目并进行比较。如果存在第二个项目,您可以启用触发器。

<xf:bind id="item-delete-trigger"
    nodeset="instance('views')/item-delete-trigger"
    relevant="instance('save-data')/item[2]" />

此语法更可取,因为它更快,并且不需要转义大于符号。

下一页: 删除确认 | 上一页: 删除
首页: XForms
华夏公益教科书