getComponent(" fieldName")。setValue()不工作

时间:2014-01-31 12:13:26

标签: xpages lotus-notes lotus-domino xpages-ssjs

场景:我对XPage应用程序有一个要求,例如,复选框组字段有3个选项。并且有3个不同的表包含每个表的超过10个字段(与数据源绑定)。无论从复选框中选择哪个选项,都应显示相应的表格(复选框组没有默认值,所有3个表格都隐藏为= nitially)。因为它是一个复选框,所以可以检查所有选项,如果未选中任何选项,则应隐藏相应的表,并清除在表中这些字段中输入的值。这是要求,它非常简单,只需要很少的时间来完成它。但问题出在这里。

问题:在复选框的onClick()事件中,我编写了SSJS代码,以清除该选项未选中的特定表中字段集的值。但它没有发生。

var ckbxValue = getComponent("checkBox").getValue();
if(!@Contains(ckbxValue,"1stOption"))
{
    array_1 = new Array("txtFld_1","txtFld_2","txtFld_3","txtFld_4","txtFld_5","txtFld_etc");
    for(d=0;d<array_1.length;d++)
    {
        //currentDocument.setValue(array_1[d],"");
        getComponent(array_1[d]).setValue("");
    }
}

当我取消选中第一个选项时,第一个表将隐藏,这将执行并清除字段值。但价值观没有被清除。但是相同的代码适用于计算文本(没有绑定),并且当表可见时也适用于那些字段。我不明白为什么没有发生这种情况。

我做了另一种解决方法,并满足了暂时的要求。我想知道那段时间发生了什么。

我发现的是,最初有一个隐藏的绑定字段,我通过单击按钮将值设置为“AAA”。现在我显示按钮是一些具有完全更新的条件,该字段将显示值“AAA”。现在该字段可见,我通过单击另一个按钮将值设置为“BBB”。现在它将显示值为“BBB”。我现在隐藏它并将值设置为“CCC”并再次使该字段可见。现在我需要看到值“CCC”,但我看到“BBB”。它是如何发生的?

有谁能让我明白为什么会这样发生?

提前致谢。

1 个答案:

答案 0 :(得分:6)

不要追踪组件。最好的方法是将组件绑定到范围变量并读取该变量。特别是复选框可以为您节省很多麻烦。

将UI元素视为可视化,而不是数据。业务逻辑总是对数据起作用,而不是对其可视化表示。

试一试。