【发布时间】:2012-12-13 16:14:17
【问题描述】:
在 Wicket 6 之前,IAjaxCallDecorator.decorateScipt 返回的 javascript 代码在单击后立即执行。我根据migration-guide迁移了IAjaxCallDecorator。 在 5 秒内点击链接 3 次,预期的结果是:
- 获取前提条件
- 获取前提条件
- 获取前提条件
- getSuccessHandler
- getSuccessHandler
- getSuccessHandler
但结果是:
- 获取前提条件
- getSuccessHandler
- 获取前提条件
- getSuccessHandler
- 获取前提条件
- getSuccessHandler
用例:阻塞直到 Ajax 请求完成,请参阅http://my.safaribooksonline.com/book/-/9781849511605/deeper-into-ajax/ch07lvl1sec04(第 162 页)
还有其他方法可以将 IAjaxCallDecorator 迁移到 Wicket 6 吗?
public class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
add(new Label("version", getApplication().getFrameworkSettings().getVersion()));
AjaxLink<Void> blockingLink = new AjaxLink<Void>("blockingLink") {
@Override
public void onClick(AjaxRequestTarget target) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
IAjaxCallListener blockingListener = new AjaxCallListener() {
@Override
public CharSequence getPrecondition(Component component) {
return "console.log('getPrecondition');";
}
@Override
public CharSequence getSuccessHandler(Component component) {
return "console.log('getSuccessHandler');";
}
};
attributes.getAjaxCallListeners().add(blockingListener);
}
};
add(blockingLink);
}
}
【问题讨论】:
-
AFAICS 没有在调用排队之前调用的钩子方法。你需要这个做什么?
-
阻塞直到 Ajax 请求完成,参见my.safaribooksonline.com/book/-/9781849511605/deeper-into-ajax/…