0

私のページには、自動車ディーラーのリストを表示するパネルがあります。パネルには、以下に説明するように、各ディーラーの情報を含むディーラーのリストが表示されます。

  • ディーラーごとに、名前、住所、電話番号、営業時間を表示する必要があります。データはjsonにあります。
  • 名前、住所、電話番号:これらは単純なテキストラベルです。
  • 時間:各ディーラーには「時間の表示」というリンクがあります。クリックすると、時間データがまだ存在しない場合は「loading-gif」を示すテキストラベルがリンクを下にスライドし、それ以外の場合は時間データを表示します。リンクをもう一度クリックすると、時間データが非表示になります。

ページがレンダリングされるとき、これは私が必要とする動作です:

  • ページレンダリングでは、名前、住所、電話ラベル、時間のリンクを表示します。今のところ、jsonの時間情報はありません。
  • ページがレンダリングされたら、サーバー(Ajax?)にリクエストを送信し、時間情報を含む更新されたjsonを取得し、「ビュー時間」を再レンダリングして、クリックすると時間が表示されるようにします。これは私がどうしたらいいかわからないことです。

最初に時間情報を含むjsonを送信しないのはなぜですか?これは、費用がかかり、[時間の表示]リンクが使用されることはめったにないためです。したがって、すべてのデータを事前に収集すると、ページのレンダリングが遅くなります。ページ読み込みのイベント/行為によって、時間データを取得し、[時間の表示]リンクをクリックすると下にスライドする時間のテキストラベルのみを再レンダリングするリクエストがトリガーされるようにします。

調べましAjaxSelfUpdatingTimerBehaviorたが、そのトリガーはページの読み込みではなく、継続時間です。

4

3 に答える 3

0

リンクは「非常にまれ」に使用されるため、view hoursページの読み込み中または読み込み後にすべてをプルアップするのではなく、必要に応じてこれらのデータを取得することをお勧めします。

これにより、ページで大量のデータを収集するオーバーヘッドが削減され、各データを各レコードに関連付けて解析し、HTML に配置する必要がなくなります。

于 2013-01-28T11:30:39.200 に答える
0

これには an を使用できますAjaxLazyLoadPanel(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

「時間表示」リンクとパネル上のデータを取得するコードを追加してから、AjaxLazyLoadPanel http://www.mkyong.com/wicket/how-do-use-ajaxlazyloadpanel-in-wicket/を使用してそのパネルを遅延ロードしてみてください。 . アプリケーションがデータを収集している間、リンクごとに loading-gif を表示できます。

于 2013-01-28T17:01:36.977 に答える