0

在我的页面上有一个显示汽车经销商列表的面板。面板显示经销商列表,其中包含每个经销商的信息,如下所述。

  • 对于每个经销商,我需要显示:姓名、地址、电话、营业时间。数据是json。
  • 姓名、地址、电话:它们是简单的文本标签。
  • hours:每个经销商都有一个“查看时间”链接。单击它时,如果小时数据尚不存在,则文本标签会向下滑动显示“正在加载 gif”的链接,否则会显示小时数据。再次单击链接将隐藏小时数据。

呈现页面时,这是我需要的行为:

  • 在页面渲染中,我显示姓名、地址、电话标签和营业时间链接。截至目前,我没有json 中的时间信息。
  • 页面呈现后,我想向服务器发出请求(Ajax ?),获取带有小时信息的更新 json 并重新呈现“查看时间”,以便在单击时显示小时。这是我不知道该怎么做。

为什么我最初不发送带有小时信息的 json?这是因为收集成本很高,而且很少会使用“查看时间”链接。因此,预先收集所有这些数据会使页面呈现速度变慢。我希望页面加载的事件/行为触发获取小时数据的请求并仅重新呈现在单击“查看时间”链接时向下滑动的小时文本标签。

我看了看,AjaxSelfUpdatingTimerBehavior但它的触发器是持续时间,而不是页面加载。

4

3 回答 3

0

您可以AjaxLazyLoadPanel为此使用 an (如 drobson 建议的那样)。这很好用,但在您的场景中它可能有 1 个缺点。要更新的每一个小时都将是一个同步的 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()");
}
于 2013-01-29T10:21:42.583 回答
0

根据您的说法,由于view hours链接将“很少”使用,因此最好按需获取这些数据,而不是在页面加载期间/之后将它们全部拉出。

反过来,这将减少在页面中收集大量数据的开销,并使您无需将每个数据与每个记录关联、解析它们并将它们放入 HTML 中。

于 2013-01-28T11:30:39.200 回答
0

尝试添加“查看时间”链接和代码以获取面板上的数据,然后使用 AjaxLazyLoadPanel 延迟加载该面板http://www.mkyong.com/wicket/how-do-use-ajaxlazyloadpanel-in-wicket/ . 您可以在应用程序收集数据时为每个链接显示加载 gif。

于 2013-01-28T17:01:36.977 回答