尝试使用Select2获取listBox的值

时间:2015-10-02 17:03:37

标签: xpages xpages-extlib

我在最新版本的Domino上安装了最新的扩展库。我使用一个简单的listBox,其中包含来自DBColumn的值(用于填充listBox)。

但是,我似乎无法获得listBox的选定值。我在网上捅了一会儿,发现了几件不同的东西,我试过了不成功。然后我开始阅读有关必须安装其他库等的内容。现在我很困惑。以下是我的代码。我想要做的就是从listBox中获取所选值,但是我真的想使用select2功能来搜索listBox。有人能指出我在正确方向上如何在变化时获得所选值吗?

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:bx="http://www.openntf.org/xsp/bootstrap">

<xp:scriptBlock id="scriptBlock2">
<xp:this.value>
<![CDATA[
  $(document).ready(
    function() { x$( "#{id:listBoxProperties}" ).select2()
      .on("change", function(e) { XSP.partialRefreshPost(
         "#{id:computedField2}" );
       }
    }
  );
]]>
</xp:this.value>
</xp:scriptBlock>

    <xp:panel>
        <xp:listBox id="listBoxProperties" value="#{viewScope.selectedProperty}"
            style="width:250px">
            <xp:selectItems>
                <xp:this.value><![CDATA[#{javascript:listOfProperties = @DbColumn( @DbName(), 'vwAuditDocsByPropertyNo', 1 );
if( @IsError( listOfProperties ) )
        "Error looking up properties: " + listOfProperties;
    listOfProperties;
  }]]></xp:this.value>
            </xp:selectItems>
            <xp:eventHandler event="onchange" submit="true"
                refreshMode="complete">
            </xp:eventHandler></xp:listBox>
        <bx:select2PickerCombo id="select2Property"
            for="listBoxProperties" placeHolder="-Select a Property-"
            binding="#{javascript:viewScope.selectedProperty}">
        </bx:select2PickerCombo>
        <xp:br></xp:br>
        <xp:text escape="true" id="computedField1"
            value="#{javascript:viewScope.selectedProperty;}">
        </xp:text>
        <xp:text escape="true" id="computedField2">
            <xp:this.value><![CDATA[#{javascript:getComponent( "listBoxProperties").getValue()}]]></xp:this.value>
        </xp:text>
    </xp:panel>
</xp:view>

1 个答案:

答案 0 :(得分:0)

我已经测试了你的场景,并且可以验证在使用bx:select2PickerCombo将listBox设置为Select2控件时,lixtBox的onchange事件不会触发。如果删除使用bx:select2PickerCombo,onchange事件将按预期触发。这是一个简单的例子(不使用bx:select2PickerCombo):

<xp:listBox id="listBoxProperties" value="#{viewScope.selectedProperty}" style="width:250px">
    <xp:selectItems>
        <xp:this.value><![CDATA[#{javascript:["1","2","3"]}]]></xp:this.value>
    </xp:selectItems>
    <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="refreshField"></xp:eventHandler>
</xp:listBox>
<!--<bx:select2PickerCombo id="select2Property" for="listBoxProperties" placeHolder="-Select a Property-" binding="#{javascript:viewScope.selectedProperty}"></bx:select2PickerCombo>-->

<xp:text escape="true" id="refreshField" value="#{javascript:viewScope.selectedProperty;}"></xp:text>

您需要手动将Select2添加到listBox以使onchange事件正常工作。有关详细信息,请参阅此答案:Bootstrap4XPages plugin: how to catch a change event with Select2 Picker?