在 Adob​​e Livecycle(可能是 Javascript)中,如何引用多个 pages/subpages 以同时隐藏它们?

In Adobe Livecycle (possibly Javascript), how do I reference multiple pages/subpages to hide them simultaneously?

我想这最终可以应用于对象和页面。不过目前,我真的更关心页面和子表单。

我想 hide/show 基于下拉菜单选择的多个页面。我当然搜索过这个主题。似乎没有人在问我在问什么,而且最密切相关的问题只回答单个对象而不是多个对象。我有将近 80 种不同的东西 pages/subforms 需要担心。

我有一个下拉菜单,根据选择,以前隐藏的某些页面和子表单会变得可见。但是,我试图建立一定的宽容度,这样如果有人不小心在下拉菜单中选择了错误的项目并返回进行自我纠正,要么 (1) 所有关联的页面都将返回到默认的隐藏状态,在继续前进并使某些选择可见之前,或者 (2) 每个对象都被手动命名并被告知返回隐藏状态。

我发现的唯一方法如下:

switch (newValue)
{
    case "1":
        this.resolveNode("subform_1").presence = "visible";
        this.resolveNode("subform_2").presence = "hidden";
        this.resolveNode("page_3").presence = "hidden";
        break;

    case "2":
        this.resolveNode("subform_1").presence = "hidden";
        this.resolveNode("subform_2").presence = "visible";
        this.resolveNode("page_3").presence = "hidden";
        break;

    case "3":
        this.resolveNode("subform_1").presence = "hidden";
        this.resolveNode("subform_2").presence = "hidden";
        this.resolveNode("page_3").presence = "visible";
        break;
}

这很乏味、耗时且不雅观。相反,我想做的是同时处理多个对象。类似于:

switch (newValue)
{
    case "1":
        this.resolveNode("subform_2", "page_3").presence = "hidden";
        this.resolveNode("sabform_1").presence = "visible";
        break;

    case "2":
        this.resolveNode("subform_1", "page_3").presence = "hidden";
        this.resolveNode("subform_2").presence = "visible";
        break;

    case "3":
        this.resolveNode("subform_1", "subform_2").presence = "hidden";
        this.resolveNode("page_3").presence="visible";
        break;
}

我知道这本身就不够优雅,但考虑到 sheet 的整体设计、命名方案等,确实没有办法让系统调用所有页面或以相同字母等开头的子表单。所以我必须给每一个单独命名。那很好!但我试过一百万种方法都无济于事。我只是想要一种更简洁的方式来 hide/make 同时显示多个页面和子表单,或者禁止将可见性重置为默认值。

Adobe 论坛上的好心人非常乐于助人,并提供了 following answer:

使用数组和 forEach() 方法,您可以编写一个非常紧凑的脚本来完成您想要的操作。

var aObjects = [[subpage_1, "1"], [subpage_2, "2"], [page_3", "3"]],  
  cSelection = xfa.event.change;  
// Loop through all elements in the array…  
aObjects.forEach(function (element) {  
    //… and set its presence  
    // element[0] is the first value of the nested array i.e. "subpage_1", element[1] is the second value i.e. "1"  
    element[0].presence = element[1] === cSelection ? "visible" : "hidden";  
});