我正在和Hybris一起使用Orbeon表格。我们有几个页面链接在一起,用户需要按顺序浏览它们(结账过程)。
Orbeon表单的内容是动态,是根据之前步骤的操作确定的。例如。
如果用户在步骤1中将产品A添加到购物车,则在步骤2中的表单上只能看到两个字段,如果他在步骤1中添加了另一个(产品B),则应再增加一个字段在表格上可见。
我正在使用某个预处理器类,它预先填充表单上的一些隐藏字段,然后动态显示的逻辑基于这些隐藏字段在表单本身上。当通过这些步骤来回移动时,这可以在一个简单的场景中工作。
然而,问题是我需要在页面上显示 HTML 迷你购物车(不是Orbeon表单的一部分),这也可以< strong>以异步方式触发添加/删除产品。
因此,当我在显示表单的第2步时,用户还可以删除/重新添加一些产品 - &gt;因此,这需要触发表单的异步重新呈现并更改表单的显示(添加或删除新字段)。
我使用AJAX来处理这种异步问题,而我遇到的问题是,当页面第一次加载时会生成许多特定于Orbeon的Javascript文件和变量,并且会使用一些随机的FormID 。当我从后端检索新表单时以及在尝试替换HTML内容时,我在控制台中遇到各种错误时,此FormID不同,因为旧的表单ID遍布整个地方。
如果能够实现这一目标以及如何解决这个问题,有没有人有任何建议?
更新:&#34;隐藏&#34;的示例字段 glass-coverage-selected
<xf:instance id=""fr-form-instance"" xxf:exclude-result-prefixes=""#all"">
<form>
<glass-coverage-selected/>
<section-1>
<massive-exterior-walls/>
</section-1>
...
稍后,会创建一个绑定:
<xf:bind id=""section-40-bind"" ref=""section-40"" name=""section-40"" relevant=""instance('fr-form-instance')/glass-coverage-selected = 'yes'"">
<xf:bind id=""previous-glass-insurance-bind"" ref=""previous-glass-insurance"" name=""previous-glass-insurance"">
<xf:required id=""validation-156-validation"" value=""true()""/>
</xf:bind>
该绑定用于控制某些部分的可见性:
<fr:section id=""section-40-control"" bind=""section-40-bind"">
<xf:label ref=""$form-resources/section-40/label""/>
<fr:grid>
<xh:tr>
<xh:td>
<xf:select1 id=""previous-glass-insurance-control"" appearance=""full"" bind=""previous-glass-insurance-bind"" class=""previous-insurance"">
<xf:label ref=""$form-resources/previous-glass-insurance/label""/>
<xf:hint ref=""$form-resources/previous-glass-insurance/hint""/>
<xf:help ref=""$form-resources/previous-glass-insurance/help""/>
<xf:alert ref=""$form-resources/previous-glass-insurance/alert[1]"" validation=""validation-156-validation""/>
<xf:alert ref=""$form-resources/previous-glass-insurance/alert[2]""/>
<xf:itemset ref=""$form-resources/previous-glass-insurance/item"">
<xf:label ref=""label""/>
<xf:value ref=""value""/>
<xf:hint ref=""hint""/>
</xf:itemset>
</xf:select1>
</xh:td>
</xh:tr>
</fr:grid>
</fr:section>
答案 0 :(得分:1)
您可以在浏览器中操作JavaScript中表单字段的值。如果要设置“隐藏字段”的值,请确保将这些字段设置为未隐藏,方法是在表单生成器中将false()
放在可见性下。如果您这样做,出于安全原因,该字段的值甚至不会由Orbeon Forms发送到浏览器,也不能从JavaScript设置。相反,为了能够从JavaScript设置值,您需要使用CSS隐藏控件。最简单的方法是在“控制设置”对话框中为该字段添加类xforms-disabled
。
然后,假设表单生成器中的控件名称为my-control
,则在JavaScript中您可以编写var control = ORBEON.jQuery('*[id $= "my-control-control"]'); ORBEON.xforms.Document.setValue(control.attr('id'), '42');
。请注意在控件名称末尾添加的-control
。首先测试一下,我建议你不要把CSS类,所以你可以更容易地看到设置值是否有效。
有关上述setValue()
和其他JavaScript API的文档,请参阅第Client-side JavaScript API页。