始终在特定类型的所有其他HeaderItem之后呈现某些Wicket HeaderItem

问题描述

我有一个自定义的Wicket行为(RegisterBehavIoUr),可以将其附加到各种Wicket组件,以通过RegisterBehavIoUr.renderHead(Component,IHeaderResponse)中的(OnDomready-)HeaderItem向它们添加多个javescript-Snippets事件处理程序。 >

现在,我需要在页面加载后立即触发这些事件之一,以使用某个计算值初始化所有组件。为此,我认为可以添加一个Wicket行为(TriggerBehavIoUr)来生成适当的javescript-Snippet。

我的问题是,由TriggerBehavIoUr生成javescript-Snippet必须在 all {{{ 1}}在页面上和所有组件中都已运行。我知道HeaderItems可以具有依赖项,但是当我想要加载某种通用库(例如jQuery)或在自定义代码之前执行的代码时,这种机制似乎针对这种情况。为了在我的案例中使用此方法,我必须以某种方式即时找到要添加页面当前呈现阶段的所有RegisterBehavIoUr并动态地将它们作为对RegisterBehavIoUrs的依赖项添加,因此它们在TriggerBehavIoUr JavaScript之前运行。但是,我看不到如何获得某种类型的所有HeaderItem的列表。

在Wicket或JavaScript中如何解决此问题的任何技巧?

(使用Java 8和Wicket 8.9.0)

解决方法

您可以使用FilteredHeaderItem。

RegisterBehaviour和TriggerBehaviour都将贡献它们的标头项,并封装在FilteredHeaderItem中。

在HTML模板中,您将对两个过滤器使用两个占位符:

<div id="registerFilter"></div>
<div id="triggerFilter"></div>

浏览器从上到下执行JavaScript,因此触发代码将在注册代码之后。