getComponent("fieldName").setValue()Not Working

fly*_*ick 1 lotus-notes lotus-domino xpages 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("");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

任何人都可以让我理解为什么会这样发生吗?

提前致谢.

stw*_*sel 6

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

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

试一试.

  • "可见性"的问题在于它实际上是否"渲染"了组件,而不是它是否可见.因此,当它计算可见性/渲染为false时,该元素不可用,而不仅仅是隐藏.这是一个标签很差的属性,在源代码中变得比在设计选项卡上更明显.包含复选框的代码以进一步解决问题可能很有用. (2认同)
  • Stephan绝对正确:组件存在供*users*进行交互,数据源用于*code*进行交互.永远不要使用`getComponent("id").setValue("value")`...而是使用`dataSource.setValue("property","value")`或`someScope.put("property","value" )`.这映射到组件的值绑定,例如`<xp:text value ="#{dataSource.property}"/>`.如果组件未绑定到数据,但您需要以编程方式更改其值,将其绑定到数据,并更新代码以与该数据通信...组件将自动获取新值. (2认同)