【问题标题】:xpages column showCheckboxxpages 列显示复选框
【发布时间】:2014-08-18 19:52:34
【问题描述】:

有一个viewPanel 有一个带有showCheckbox="true" 的列。

是否可以限制用户只选择 viewPanel 列出的一行/文档(而不是多行/文档。)?

【问题讨论】:

  • 是的,使用 javascript/jQuery,但我不相信你可以在服务器端做到这一点。如果您对编写客户端 javascript 感到满意,您可以弄清楚。

标签: xpages


【解决方案1】:

不在视图面板中。视图面板旨在提供一种快速、简单但功能受限的方法。

另一种(可能更好)方法可能是在另一列中添加链接或图像,以触发您需要的任何功能。这将允许用户通过单击而不是两次来触发功能。视图面板允许您将控件放置在列中,而不仅仅是映射到基础视图中的列。

或者,您可以手动将复选框添加到列,映射到范围变量,并以编程方式选中/取消选中。

【讨论】:

    【解决方案2】:

    保罗可能是正确的。我的替代方法是使用重复控件。你可以让它看起来像你想要的那样。包括一个视图控件。

    我在 NotesIn9 节目中有一个例子:http://notesin9.com/index.php/2011/07/11/notesin9-ee-009-using-java-hashmaps-and-treemaps-with-xpages/

    现在在我的示例中,我做了多个值。但是,如果您将“选定”文档 ID 保留在单个值字段中,而不是 HashMap 或 ArrayList,那么您将得到您想要的。一次一个文档。

    【讨论】:

      【解决方案3】:

      我同意 Paul Stephans 的观点(也赞成他的回答,因为我认为这将是 Nest 解决方案),但如果您坚持在 viewPanel 中添加这样的功能,您可以通过添加客户端脚本来阻止用户选择多个元素:

      首先将styleClass="rowCB" 添加到您的复选框行并将此代码插入您的xpage:

      <xp:scriptBlock>
          <xp:this.value><![CDATA[dojo.ready(function(){
          dojo.query('.rowCB>input').connect("onclick", function(evt){ 
                    var target = evt.target.id;
                    if(!window.crrCheckedElement){
                      window.crrCheckedElement = evt.target.id;
                    }else if(window.crrCheckedElement != target){
                          alert("You can select only one item!");
                          evt.target.checked = false;
                    }else if(window.crrCheckedElement == target){
                        window.crrCheckedElement = "";
                    }
                  })
          });]]></xp:this.value>
      </xp:scriptBlock>
      

      也许代码需要一些改进,但这应该是你的方法。

      【讨论】:

      • CSJS 是要走的路。只是想指出您可能会遇到分页问题...
      • @MichaelSaiz 我会试一试并告诉你。
      【解决方案4】:

      虽然可能不是最好的解决方案,但这是一种可能性。

      function deselectOtherDocs(viewName, currentDocId) {
      var viewPanel:com.ibm.xsp.component.xp.XspViewPanel = getComponent(viewName);
      var selectedIds = viewPanel.getSelectedIds();
      for(var i=0; i<selectedIds.length; ++i){
      if(selectedIds[i]!=currentDocId){viewPanel._xspSetIdUnchecked(selectedIds[i])}
      return;
      }
      

      在检查文档并传递视图控件名称和当前文档的 unid 时将其关闭。

      请原谅任何错别字。我正在用手机写信。

      编辑:如果您不必使用视图控件,那么 David Leedy 的建议就是要走的路。将选定的unid存储在范围变量中,并让它确定选择了哪个重复行的框。您也可以考虑使用单选按钮而不是复选框,因为前者被用户理解为单个选择器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多