动态组合框在其更新时不会更新它的绑定范围变量

时间:2014-04-16 14:44:30

标签: xpages

嗨,我在组合框中遇到了一些麻烦。这是一个复制/粘贴示例代码,用于演示我的问题。

    <xp:this.beforeRenderResponse><![CDATA[#{javascript://  
        viewScope.value1 = "document.getItemValueString('value1')" + viewScope.document;
        viewScope.value2 = "document.getItemValueString('value2')" + viewScope.document;}]]>
    </xp:this.beforeRenderResponse>

    <xp:button
        value="change document"
        id="button1">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript: viewScope.document = new Date().getMilliseconds()//}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>
<br></br>
    <xp:comboBox id="comboBox1" value="#{viewScope.value3}">
        <xp:selectItems>
            <xp:this.value><![CDATA[#{javascript:viewScope.value1;}]]></xp:this.value>
        </xp:selectItems>
        <xp:selectItems>
            <xp:this.value><![CDATA[#{javascript:viewScope.value2;}]]></xp:this.value>
        </xp:selectItems>
        <xp:eventHandler
            event="onchange" submit="true" refreshMode="complete">
            <xp:this.action><![CDATA[#{javascript://}]]></xp:this.action>
        </xp:eventHandler>
    </xp:comboBox>

    <br></br>
    <xp:text escape="true" id="computedField1" value="#{viewScope.value1}"></xp:text>
    <br></br>
    <xp:text escape="true" id="computedField2" value="#{viewScope.value2}"></xp:text>
    <br></br>
    <xp:text escape="true" id="computedField3" value="#{viewScope.value3}"> </xp:text>

我尝试了什么:我有一个带有两个或更多计算的selectItem的组合框。它们取决于当前选择的文件。为了演示文档切换,我在本例中使用了按钮更改文档。当选择新文档时,beforeRenderResponse事件 从文档中获取itemvalues并将它们放入viewscope var中。我必须分开这两个值,所以我不能使用数组。到目前为止所有工作但是:如果我选择一个值,例如value2(timestamp1)并做一个开关文件,那么组合框绑定的viewScope.value3没有更新。 它显示上一个文档中的旧值2,直到我触发其onChange事件。

所以我的问题是如何强制comboBox用其selectItems更新其viewScope var。

1 个答案:

答案 0 :(得分:0)

找到一个至少适用于我的copy / pase示例的解决方案:

<xp:this.beforeRenderResponse><![CDATA[#{javascript://  
    viewScope.value1 = "document.getItemValueString('value1')" + viewScope.document;
    viewScope.value2 = "document.getItemValueString('value2')" + viewScope.document;
    var list = new Array();
        list.push(value1);
        list.push(value2);
    if(!@IsMember(viewScope.value3,list)){
        viewScope.value3 = list[0];//list.pop();
    }}]]>
</xp:this.beforeRenderResponse>

现在,如果文档被更改,viewScope.value3将变为value1。