【发布时间】:2014-08-18 19:52:34
【问题描述】:
有一个viewPanel 有一个带有showCheckbox="true" 的列。
是否可以限制用户只选择 viewPanel 列出的一行/文档(而不是多行/文档。)?
【问题讨论】:
-
是的,使用 javascript/jQuery,但我不相信你可以在服务器端做到这一点。如果您对编写客户端 javascript 感到满意,您可以弄清楚。
标签: xpages
有一个viewPanel 有一个带有showCheckbox="true" 的列。
是否可以限制用户只选择 viewPanel 列出的一行/文档(而不是多行/文档。)?
【问题讨论】:
标签: xpages
不在视图面板中。视图面板旨在提供一种快速、简单但功能受限的方法。
另一种(可能更好)方法可能是在另一列中添加链接或图像,以触发您需要的任何功能。这将允许用户通过单击而不是两次来触发功能。视图面板允许您将控件放置在列中,而不仅仅是映射到基础视图中的列。
或者,您可以手动将复选框添加到列,映射到范围变量,并以编程方式选中/取消选中。
【讨论】:
保罗可能是正确的。我的替代方法是使用重复控件。你可以让它看起来像你想要的那样。包括一个视图控件。
我在 NotesIn9 节目中有一个例子:http://notesin9.com/index.php/2011/07/11/notesin9-ee-009-using-java-hashmaps-and-treemaps-with-xpages/
现在在我的示例中,我做了多个值。但是,如果您将“选定”文档 ID 保留在单个值字段中,而不是 HashMap 或 ArrayList,那么您将得到您想要的。一次一个文档。
【讨论】:
我同意 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>
也许代码需要一些改进,但这应该是你的方法。
【讨论】:
虽然可能不是最好的解决方案,但这是一种可能性。
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存储在范围变量中,并让它确定选择了哪个重复行的框。您也可以考虑使用单选按钮而不是复选框,因为前者被用户理解为单个选择器。
【讨论】: