Adobe LiveCycle Designer JavaScript эквивалентен FormCalc [*]

Я использую 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. Я просто не уверен, как использовать его в контексте для нацеливания на нераскрытое количество динамически создаваемых элементов.

Я заключил все выражение в resolNode, начал выражение с xfa.resolveNode("..., использовал звездочку внутри resolveNode (resolveNode("Row1[*]")), вставил ее прямо туда, где находится строка (Table1.resolveNode("Row1[*]").blah), и любую другую произвольную комбинацию, которую я мог придумать, но безрезультатно.

Буду очень признателен за любое понимание того, где я ошибаюсь. Заранее спасибо.


person whist    schedule 11.03.2014    source источник


Ответы (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";
}
person harun    schedule 12.03.2014
comment
Это имеет большой смысл и прекрасно работает. Большое спасибо. - person whist; 12.03.2014