在我的页面上有一个显示汽车经销商列表的面板。该面板显示经销商列表,其中包含每个经销商的信息,如下所述。
呈现页面时,这是我需要的行为:
为什么我最初不发送带有小时信息的json?这是因为收集费用昂贵而且“观看时间”链接很少使用。因此,预先收集所有数据将使页面呈现缓慢。我希望页面加载的事件/行为触发请求获取小时数据&重新呈现仅小时文本标签,点击“查看时间”链接向下滑动。
我查看了AjaxSelfUpdatingTimerBehavior
,但其触发器是持续时间,而不是页面加载。
答案 0 :(得分:0)
由于view hours
链接将被“非常罕见”使用,根据您的说法,最好是按需获取这些数据,而不是在页面加载期间/之后将它们全部拉出来。
这反过来会减少在页面中收集大量数据的开销,并且还可以让您将每个数据与每个记录相关联,解析它们并将它们放入HTML中。
答案 1 :(得分:0)
尝试添加“查看时间”链接和代码以获取Panel上的数据,然后使用AjaxLazyLoadPanel http://www.mkyong.com/wicket/how-do-use-ajaxlazyloadpanel-in-wicket/延迟加载该面板。当应用程序收集数据时,您可以为每个链接显示loading-gif。
答案 2 :(得分:0)
您可以使用AjaxLazyLoadPanel
(如drobson建议的那样)。这非常好用但在你的场景中它可能有一个缺点。每个要更新的小时都是同步的AJAX调用,因此每个小时都需要单独更新。这可能意味着更多的流量和不理想的用户体验。
另一种选择可能是在您的页面中添加AbstractDefaultAjaxBehavior
,这将更新小时数(并将整个面板添加到目标)。您可以在文档加载时调用此行为生成的方法。
this.add(new AbstractDefaultAjaxBehavior() {
@Override
protected void respond(AjaxRequestTarget target) {
//calculate hours + add list or whatever to the target
}
@Override
protected CharSequence getCallbackScript() {
StringBuilder result = new StringBuilder();
result.append("function resetHours() {\n");
result.append("wicketAjaxPost('" + this.getCallbackUrl() + "', null, function(){}, function(){});" + "\n");
result.append("}\n");
return result;
}
});
电话:
public void renderHead(IHeaderResponse response) {
response.renderOnLoadJavaScript("resetHours()");
}