我想将html中javascript代码块的输出传递给相应的wicket组件.我尝试过AbstractDefaultAjaxBehaviour,它似乎不起作用.
这是我正在使用的:
// In <body>
<div wicket:id="container">
<script type="text/javascript" wicket:id="channelScript">
function initChannel() {
window.alert('got it');
}
</script>
</div>
private WebMarkupContainer container = new WebMarkupContainer("container");
private Label channelScript = new Label("channelScript", "initChannel();");
add(container);
final AbstractDefaultAjaxBehavior channel = new AbstractDefaultAjaxBehavior() {
protected void respond(final AjaxRequestTarget target) {
channelScript.setEscapeModelStrings(false);
target.add(channelScript); // initChannel is not triggerred
}
};
container.add(channel);
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
add(new AjaxEventBehavior("onload") {
@Override
protected void onEvent(AjaxRequestTarget target) {
channelScript.setEscapeModelStrings(false);
target.add(new Label(channelScript));
}
}
Run Code Online (Sandbox Code Playgroud)
请问我做错了什么?谢谢
我将把一系列变量从wicket传递给JS,这样每个javascript输出都会使用wicket组件显示.我刚刚意识到我将不得不用dom ready状态来开始交互.所以没关系.但是后来我仍然对Wicket组件如何改变状态以接收来自javascript的更新响应感到困惑和无能为力.是否有一个wicket组件异步触发自身?
不要将Label用作脚本容器.Wicket有一些适当的方法来做到这一点.以下代码将在选项上(假设您在wicket 1.5上)
@Override
public void renderHead(final Component component, final IHeaderResponse response)
{
super.renderHead(component, response);
response.renderJavaScript("initChannel();", "myScriptID");
}
Run Code Online (Sandbox Code Playgroud)
如果要在站点完全加载后执行脚本,可以使用以下命令:
response.renderOnLoadJavaScript("doSomething();");
Run Code Online (Sandbox Code Playgroud)
在wicket 1.4中,这种方式有所不同.你必须在那里使用HeaderContributors.
| 归档时间: |
|
| 查看次数: |
19434 次 |
| 最近记录: |