Orbeon Forms - 防止表单生成器覆盖表单中的模板

Posted

技术标签:

【中文标题】Orbeon Forms - 防止表单生成器覆盖表单中的模板【英文标题】:Orbeon Forms - prevent Form Builder from override template in form 【发布时间】:2021-05-30 23:42:18 【问题描述】:

我使用的是 Oberon 表单版本 2019.2 CE。 假设我有部分:

<s_address>
 <s_address-iteration>
  <grid-address>
   <c_country label=""/>
  </grid-address>
 </s_address-iteration>
</s_address>

当我运行表单并添加此部分的新重复时,会从此模板创建新的重复:

<xf:instance xxf:readonly="true" xxf:exclude-result-prefixes="#all"
                     id="s_address-template">
            <s_address-iteration>
                <grid-address>
                    <c_country/>
                </grid-address>
            </s_address-iteration>
</xf:instance>

现在,我还想在模板中的字段 c_country 中添加标签。但是,当我这样做并应用更改时,Form Builder 会从模板中删除此标签。

是否可以阻止 Form Builder 这样做?

我可以为带有标签的 s_address 部分创建自定义模板,但此解决方案将难以维护。

【问题讨论】:

【参考方案1】:

模板由 Form Builder 重新创建,这解释了为什么您的更改会消失。如果您需要在 &lt;country&gt; 上添加额外的 label 属性,手动将其添加到模板中是不可行的。

现在,仅根据上面提供的信息,我无法判断“正确的方法”是什么。这将取决于 label 属性的用途,当您需要它时。 (请随时在下面添加评论,并附上您的用例说明,我会尽力跟进。)

【讨论】:

【参考方案2】:

这个问题可能与此有关:

Orbeon forms - clear dropdown label https://github.com/orbeon/orbeon-forms/issues/4731

我需要在模板中向字段添加空标签,因为我在表单中有功能,当用户按下按钮时,表单从外部服务获取数据并用该数据提供字段(当它是动态下拉列表时,我设置值和标签)。如果我没有在字段中添加空标签,当用户添加新的部分重复时,标签将无法正确显示。

现在,我通过这种方式解决了这个问题:我根据 Form Builder 自动创建的模板创建自定义模板,并使用它而不是默认模板。这个解决方案有效,但正如我之前写的,它很难维护。

【讨论】:

感谢您发布对您有用的内容。现在我了解到您使用服务填充了 label 属性。但是谁在使用它的价值呢? (我在问,因为我想知道是否没有更简单的方法来处理这个问题。)-Alex 我不确定你在问什么。我将从我的表单中举一个例子:用户可以自己填写地址部分,也可以单击按钮,用从服务下载的数据填写地址字段。地址部分有很多动态下拉字段(带搜索)。 知道了,&lt;c_country label=""/&gt; 元素绑定到带有搜索的动态下拉列表?然后,当您在表单生成器中添加带有搜索功能的动态下拉列表时,实例中的元素应自动获得 label 属性。我想它是在一个重复的网格中,因为你有一个模板。虽然模板没有获得label 属性,但只要您创建一个新行,至少通过单击“+”图标,就会添加label。您是否看到不同的东西,或者以不同的方式添加行? -亚历克斯 字段是带有搜索的动态下拉列表(服务执行搜索设置为“是”,服务支持分页设置为“否”)。此下拉列表位于重复部分内(网格不重复)。对于 的第一个实例,我可以为该字段添加空标签(在模型中)并且效果很好。当用户添加另一个迭代时出现问题。 当用户添加新行/迭代时,表单使用模板,但模板没有字段的标签。那就是问题所在。用户添加新行/迭代后, 字段没有标签,因此如果用户单击按钮以提供该数据的字段,则不会设置 字段的标签,因为它不存在。

以上是关于Orbeon Forms - 防止表单生成器覆盖表单中的模板的主要内容,如果未能解决你的问题,请参考以下文章

Orbeon Forms - 引用模板部分之外的控件值

Orbeon FormBuilder 嵌入

django保存表单 - 覆盖旧行

将 orbeon 表单包含到 Angular 应用程序中

Orbeon 表单:单击“提交”后禁用表单字段

Python - 如何防止for循环覆盖相同的excel表