使用ComboBox重复使用自定义控件:通过属性定义</selectitems>添加<selectitems>

时间:2014-07-22 18:48:18

标签: combobox custom-controls xpages

我正在尝试使用组合框设置可重复使用的自定义控件以与Bootstrap一起使用。自定义控件已经具有Bootstrap所需的所有div,样式等。

现在,我添加了一个属性定义(类型:字符串,允许多个实例),这样当您在任何表单上使用自定义控件时,您可以向组合框添加可选值:

enter image description here

作为组合框的值属性,我添加了一个带有以下JavaScript的计算项:

compositeData.listValues

当我使用自定义控件时,我可以单独添加值,一个实例用于一个可选值,它确实很有效:

enter image description here enter image description here

但是,当我计算值时,让我们说,从关键字文档或视图列中获取值列表:

enter image description here

组合框值列表如下所示:

enter image description here

如何通过属性定义将值列表传递给组合框?它有可能吗?

更新:有没有办法循环通过属性定义的实例?这样我可以检查当前实例是单个文本值还是数组,将所有值的列表放在一起并将其作为值列表返回。

非常感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

在“自定义控件”属性中,在“类型”旁边,将其保留为“字符串”,然后单击文件夹图标。在那里你可以选择复杂的类型。

在那里,你可以在众多选择中选择视图列。

enter image description here

答案 1 :(得分:0)

更新:David Leedy指出了关于使用逗号作为@ Implode / @ Explode的分隔符的警告。如果您的任何值包含逗号,则可能会导致问题。所以,我修改了我的答案来解释:

首先,我要感谢所有看过这个问题和/或做出回应的人。

今天早上我有一个顿悟,并找到了解决方案。可能不是很优雅但它有效。

由于我们将使用@ Implode / @ Explode构建组合框的值列表,我们需要为可重用的自定义控件添加另一个属性定义。此属性将用于传递信息,计算值列表将如何分离:

enter image description here

当我向自定义属性添加值时,从关键字文档获取值列表的计算值应如下所示:

var oView:NotesView = database.getView('$vwSYSLookupKeywords');
var oDocument:NotesDocument = oView.getDocumentByKey('.DBProfile', true);

@Implode(oDocument.getItemValue('iTxtTest'),';')

如您所见,在本例中我使用“;”破坏清单。

这是我的自定义属性列表:

enter image description here

这是我使用可重用自定义控件的整个自定义控件的标记:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xc="http://www.ibm.com/xsp/custom"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xc:ccLegend
        listSeparator=";">
        <xc:this.listValues>
            <xp:value>Test 1</xp:value>
            <xp:value>Test 2</xp:value>
            <xp:value>#{javascript:var oView:NotesView =
                database.getView('$vwSYSLookupKeywords'); var
                oDocument:NotesDocument = oView.getDocumentByKey('.DBProfile',
                true); @Implode(oDocument.getItemValue('iTxtTest'),';')}</xp:value>
        </xc:this.listValues>
    </xc:ccLegend>
</xp:view>

如果我现在在组合框的计算值列表中使用以下内容:

var sSeparator = compositeData.listSeparator;

@Explode(@Implode(compositeData.listValues, sSeparator), sSeparator);

值在组合框中正确显示:

enter image description here

这也适用于@DBColumn和@DBLookup!

如果您有更好的解决方案,请随时在此处发布。

答案 2 :(得分:0)

您是否尝试将属性设置为object而不是string。这应该允许您通过爆炸和爆炸将数组传递给自定义控件。