Combobox 带有组合框的可重用自定义控件:添加<;选择项目>;通过属性定义

Combobox 带有组合框的可重用自定义控件:添加<;选择项目>;通过属性定义,combobox,custom-controls,xpages,Combobox,Custom Controls,Xpages,我正在尝试设置一个可重用的自定义控件,其中包含一个用于引导的组合框。自定义控件已经具有引导所需的所有div、样式等 现在,我添加了一个属性定义(type:string,Allow multiple instances),以便在任何窗体上使用自定义控件时,都可以向组合框添加可选值: 作为combobox的values属性,我使用以下JavaScript添加了一个computed项: compositeData.listValues 当我使用自定义控件时,我可以单独添加值,一个实例对应一个可选值

我正在尝试设置一个可重用的自定义控件,其中包含一个用于引导的组合框。自定义控件已经具有引导所需的所有div、样式等

现在,我添加了一个属性定义(type:string,Allow multiple instances),以便在任何窗体上使用自定义控件时,都可以向组合框添加可选值:

作为combobox的values属性,我使用以下JavaScript添加了一个computed项:

compositeData.listValues
当我使用自定义控件时,我可以单独添加值,一个实例对应一个可选值,而且效果非常好:

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

组合框值列表如下所示:

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

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

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

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


非常感谢你的帮助

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

在这里,您可以在大量选项中选择“查看列”


更新:David Leedy就使用逗号作为@inpode/@Explode的分隔符提出了一个警告。如果您的任何值包含逗号,这可能会导致问题。因此,我修改了我的回答,以说明:

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

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

由于我们将使用@impold/@Explode来构建combobox的值列表,我们需要向可重用的自定义控件添加另一个属性定义。此属性将用于传递信息,即计算值列表的分隔方式:

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

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

@Implode(oDocument.getItemValue('iTxtTest'),';')
如您所见,在本例中,我使用“;”来内爆列表

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

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

<?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>
值正确显示在组合框中:

这也适用于@DBColumn和@DBLookup


如果您有更好的解决方案,请毫不犹豫地在此处发布。

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

您好,Steve,非常感谢您的回复。如果可能的话,我想让它在点击组合框时以现在的方式在值部分工作,因此,用户可以选择添加单个值、使用Javascript或两者的组合(如果可能的话)。尝试为每种方式创建多个属性,然后计算它们使用的属性。因此,如果没有列,则使用单独的条目,如果是查看列,则忽略条目,或者将两者结合使用。你好,史蒂夫,我将试一试,让你知道它是如何运行的。我不确定我是否有答案。已经很晚了,我不知道我在追求目标。我有一个视频,里面有一些关于如何处理listbox/combobox的信息。在笔记中有一个奥利弗的博客链接。我知道这是Java,可能会让人望而生畏,但是您可以通过在类型处使用Java.lang.Object将Java对象传递到自定义控件中。“展平”compositeData.ListValues的内容如果其中一个值添加了逗号会发生什么情况?您好David,这确实是个问题。“测试3、测试4、测试5、测试6”是当我第一次获取值列表并遍历它时,数组是如何返回的(请参阅我答案中的第一个代码片段)。有什么想法吗?找到了一个解决方案:在第一个代码段中使用@inpode和任何你喜欢的字符。然后通过属性定义传递该字符,这样,它就可以与@-inflade/@-Explode一起使用。我会修改我最初的答案。