Adobe LiveCycle Designer JavaScript等同于FormCalc的[*]

时间:2014-03-11 20:47:59

标签: javascript livecycle livecycle-designer

我正在使用LiveCycle Designer构建一个动态表单,该表单能够添加和删除嵌套表的行并计算每行的总和。计算使用FormCalc并使用[*]函数来处理行的所有迭代。 (例如。...someThing.Row1[*]代替...someThing.Row[0]...someThing.Row[1]等。)

这很有效,但我也想使用Javascript来改变按钮mouseUp上某些文本字段单元格的背景填充。我可以让它针对特定单元格进行工作,但我不确定采用Javascript来解决元素的所有动态迭代的步骤。

例如,这个JavaScript可以工作但只针对单个单元格:

MainForm.roomTableSubform.roomTable.Row1.Table1.Row1.billWidth.fillColor = "0,0,0";

逻辑上,(据我所知)如果使用FormCalc来定位重复的行,代码就会产生以下效果:

MainForm.roomTableSubform.roomTable.Row1[*].Table1.Row1[*].billWidth.fillColor = "0,0,0";

这显然不适用于Javascript。我已经阅读了有关resolveNode的内容,看来这是JavaScript解决方案。我只是不确定如何在上下文中使用它来定位未公开数量的动态创建元素。

我在resolveNode中包含了整个表达式,用xfa.resolveNode("...启动了表达式,在resolveNode(resolveNode("Row1[*]"))中使用了星号,将其粘贴到Row所在的位置(Table1.resolveNode("Row1[*]").blah)我能想到的所有其他任意组合都无济于事。

对于我出错的地方的任何见解将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

xfa.resolveNode()返回一个节点。 您需要使用xfa.resolveNodes()使用SOM表达式返回节点集合。 您可以通过循环遍历节点。

var nodes = Table1.resolveNodes("Row1[*]");
var len = nodes.length;
for(var i = 0; i < len; i++){
    nodes.item(i).fillColor = "255,200,200";
}