问题描述
我有一个自定义的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,因此触发代码将在注册代码之后。