我正在尝试从 JavaScript 调用 Wicket 组件的方法,并从该方法接收一个值,我想在我用来调用该组件的 JavaScript 函数的剩余位中使用该值。但是,我似乎只能调用 Wicket 组件而不等待它产生结果。
更明确地说,我想实现一个AbstractDefaultAjaxBehavior
允许我在用户离开页面时有条件地警告用户。这个条件现在是通过某种OuterClass.shouldWarn
方法来确定的。但是,即使在下面的示例中调用了此方法,我似乎既无法等待此方法的结果,也无法返回某种结果。相反,JavaScript 只是继续并发执行 Java 方法调用。
我希望下面的(未正确运行)示例能澄清我的问题:
class PageExitWarningBehavior extends AbstractDefaultAjaxBehavior {
@Override
protected void respond(AjaxRequestTarget target) {
target.appendJavaScript("return " +
(OuterClass.this.shouldWarn() ? "false" : "true"));
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
String callbackFunktion = String.format(
"Wicket.Event.add(window, 'beforeunload', function( e ) {%n"
+ "if( e ) { e.returnValue = '%s'; }%n"
+ "var attrs = { 'u': '%s', 'c': '%s', 'ep': { } };%n"
+ "Wicket.Ajax.get( attrs );%n"
+ "return false;%n;"
+ "});",
this.getCallbackUrl(),
OuterClass.this.getMarkupId());
response.render(JavaScriptHeaderItem.forScript(callbackFunktion,
"remind-of-running-task"));
}
}