2011-11-14 49 views
3

我有一个单选按钮控件,里面有两个项目。是否可以禁用一组单选按钮中的某个选项?

<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的类属性,但那是行不通的。有没有其他方法可以做到这一点?

回答

2

好问题。不幸的是,这并不容易:

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

既然这样,我想你会需要:

  1. 创建2 <xforms:select1>。一个用于“添加”,一个用于“删除”,因此您可以在某些情况下使第二个只读。
  2. 为了使其只读,但没有“添加”也是只读的,您需要将它们绑定到2个单独的节点。
  3. 如果您想要1个节点具有A或D,您需要创建一个计算以基于2个值填充该节点。
  4. 您希望这些值是唯一的,如果您有两个<xforms:select1>,您将不需要取消选择“删除”,而是在选择“添加”时对xforms-select作出反应,反之亦然。

在模型中,你会:

<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这个例子的全部源代码。

+0

感谢您的解决方案..我会尝试,看看我是否可以在我的表单中添加额外的节点。否则,我不知道我是否隐藏单选按钮而不是禁用它。 – Akshay

相关问题