【问题标题】:Catching save event in Form Builder在表单生成器中捕获保存事件
【发布时间】:2014-12-22 19:12:22
【问题描述】:

我想在表单保存在表单生成器中后发送提交,我一开始是在尝试这样的事情(在我的 XBL 文件中):

<xf:action ev:event="fr-data-save-done" ev:observer="fr-form-model">
    <xf:message event="#all" level="modal">Saved</xf:message>
    <xf:send submission="my-submission" ev:event="#all"/>
</xf:action>

上面的代码放在 xbl:template 之间的 XBL 文件中,在 xbl:model 之外(尽管我试图将它放在 xbl:model 中但没有运气)。 不幸的是,它不起作用,在我将表单保存在 Form Builder 中后,没有显示消息。 有人知道为什么它不起作用吗?

【问题讨论】:

  • 你把这段代码放在哪里了?
  • 目前只是在xbl:template之间。我试图将它移动到 xbl:model 中,但没有帮助。
  • 还有一个问题:我使用哪个 Orbeon 版本有关系吗?它不能在 Orbeon 4.7 下工作,但也许它会在 4.5 下工作?
  • 我认为它不应该适用于任何一个版本。组件封装了功能,因此侦听组件外部的fr-data-save-done 事件应该不起作用。理想情况下,您的组件和 Form Builder 应该与事件“粘合”在一起,例如:外部事件处理程序向您的组件分派自定义事件。
  • 嗯,这听起来对我来说并不容易,您能否在谈论“外部事件处理程序”时更具体一些,或者可能有一些类似的例子?我是否正确理解不能仅基于我的 XBL 文件在保存表单上发送提交?圣诞快乐,我觉得你和 Orbeon 一起做的事情很棒,在这里帮助了所有这些人 - 我真的很感激

标签: orbeon xbl


【解决方案1】:

你可以像这样手动放置一个事件处理程序:

<foo:bar id="my-component-id" bind="my-bind">
    <xf:dispatch
        event="fr-data-save-done"
        observer="fr-form-model"
        name="my-custom-event"
        targetid="my-component-id"/>
</foo:bar>

处理程序不必在元素内:

<foo:bar id="my-component-id" bind="my-bind"/>
<xf:dispatch
    event="fr-data-save-done"
    observer="fr-form-model"
    name="my-custom-event"
    targetid="my-component-id"/>

在 XBL 组件内部:

<xbl:binding id="my-binding-id" element="foo:bar">
    <xbl:handlers>
        <xbl:handler event="my-custom-event" phase="target">
            ... XForms actions here ...
        </xbl:handler>
    </xbl:handlers>
    ...
</xbl:binding>

【讨论】:

  • 嘿 Erik,我刚刚意识到我无法完成这项工作。我已经创建了这个示例gist.github.com/anonymous/30ab64d3e7642e7860f0,但它不起作用:单击表单生成器中的保存按钮后,未显示消息。如果我将事件从“fr-data-save-done”更改为“#all”,则会显示“Working”消息,因此该事件显然有问题。
  • 非常清楚:当我将事件更改为“#all”时,在我按下测试后会显示消息,而在单击保存后不会显示该消息。所以这意味着通常处理程序正在工作,但“fr-data-save-done”存在某种问题。
  • 如果还有什么不清楚的地方,我可以解释更多,或者如果上面的例子不够好,我可以尝试创建更好的例子。
  • 啊,在表单生成器中,这是另一回事!我错过了它必须在生成器中工作。未来可能会出现这种情况,因为它过于依赖可以改变的内部结构。相反,表单生成器有一个名为oxf.fr.detail.process.save.orbeon.builderprocess。您可以覆盖该过程以添加您自己的行为。
  • 我不确定这绝对不可能。理论上,在 Form Builder 级别调度的事件意味着对正在编辑的表单隐藏。但如果可能的话,我怀疑解决方案会很脆弱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多