是否可以禁用一组单选按钮中的一个选项?

时间:2011-11-14 03:59:36

标签: readonly orbeon xforms

我有一个带有两个项目的单选按钮控件。

<xforms:select1 ref="add-delete" appearance="full">
    <xforms:item>
        <xforms:label>Add</xforms:label>
        <xforms:value>A</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Delete</xforms:label>
        <xforms:value>D</xforms:value>
    </xforms:item>
</xforms:select1>

我想只禁用单选按钮'删除'而不禁用条件X上的单选按钮'添加'。我该如何执行此操作?

我尝试使用带有xforms:item的class属性,但这不起作用。还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

好问题。不幸的是,这并不像应该那样容易:

如果您只想隐藏删除单选按钮而不是已禁用,则可以将<xforms:item>替换为绑定到您创建的节点的<xforms:itemset ref="…">的“删除” - 当你想要那个单选按钮不显示时。但是,您无法使用相同的技术通过将项目集绑定到您设为只读的节点来禁用单选按钮。 (是的,如果你能这样做会很好。)

按照目前的情况,我认为你需要:

  1. 创建2 <xforms:select1>。一个用于“添加”,一个用于“删除”,因此您可以在某些条件下将第二个用于只读。
  2. 要使其只读,但不要将“添加”设为只读,则需要将它们绑定到2个单独的节点。
  3. 如果您想要一个带有A或D的节点,则需要创建一个计算,以根据这两个值填充该节点。
  4. 您希望这些值是独占的,如果您有两个<xforms:select1>,则不会是这些值,因此当选择“添加”作为对xforms-select的反应时,您需要取消选择“删除”,并且反之亦然。
  5. 在模型中,您将拥有:

    <xforms:instance>
        <instance>
            <add/>
            <delete/>
            <add-delete/>
            <delete-enabled>true</delete-enabled>
        </instance>
    </xforms:instance>
    <xforms:bind ref="add-delete" calculate="string-join((../add, ../delete), ' ')"/>
    <xforms:bind ref="delete" readonly="../delete-enabled = 'false'"/>
    

    在视图中:

    <xforms:select1 ref="instance()/add" appearance="full">
        <xforms:item>
            <xforms:label>Add</xforms:label>
            <xforms:value>A</xforms:value>
        </xforms:item>
        <xforms:setvalue ev:event="xforms-select" ref="instance()/delete"/>
    </xforms:select1>
    <xforms:select1 ref="instance()/delete" appearance="full">
        <xforms:item>
            <xforms:label>Delete</xforms:label>
            <xforms:value>D</xforms:value>
        </xforms:item>
        <xforms:setvalue ev:event="xforms-select" ref="instance()/add"/>
    </xforms:select1>
    

    请参阅this Gist了解此示例的完整来源。