1

AjaxCallDecorator を使用しているドロップダウンがあります。現在、ドロップダウン リストからアドレスを選択すると、ajax を使用してアドレスのチェックを実行しています。ドロップダウンの横にあるスピナー アイコンを使用して、何かが起こっていることをユーザーに知らせます。ドロップダウンのオプションの 1 つは、「住所を手動で入力する」です。彼らがこれを選択したとき、私は AjaxCallDecorator を装飾したくありません。それは非常に長い間(おそらく1/4秒)ポップアップしませんが、まったく表示したくありません。

ユーザーがドロップダウンで選択した内容に基づいて、デコレータを条件付きで表示する方法がわかりません。getAjaxCallDecorator は、使用するデコレーターを決定するためにのみ使用され、初期化またはページの読み込み時に一度だけ呼び出されると確信しています。新しいドロップダウンの選択肢を選択するたびに呼び出されるわけではありません。

ありがとう。

(申し訳ありませんが、私は wicket 1.4.20 を使用していることを含めるべきでした)

4

1 に答える 1

3

頭に浮かんだ最初の解決策は、JavaScriptコードでユーザーが直接選択したオプションを確認することです。

Wicket 1.5のコードは次のとおりです(AjaxCallDecoratorを使用した最後のバージョンであるため)。

@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {
    return new AjaxCallDecorator() {

        @Override
        public CharSequence decorateScript(Component c, CharSequence script) {
            return "if (" + shouldUseDecoratorScript() + ") { /* Show the spinner icon */ } " + script;
        }

        @Override
        public CharSequence decorateOnSuccessScript(Component c, CharSequence script) {
            return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script;
        }

        @Override
        public CharSequence decorateOnFailureScript(Component c, CharSequence script) {
            return "if (" + shouldUseDecoratorScript() + ") { /* Hide the spinner icon */ } " + script;
        }

        private CharSequence shouldUseDecoratorScript() {
            return "this.value !== \"" + enterAddressManuallyItem.getId() + "\"";
        }
    };
}

ここで、enterAddressManuallyItemは、「アドレスを手動で入力する」オプションに対応する項目です。getId()getterがあると思いますが、次のようなものを使用します

new ChoiceRenderer<DropDownChoiceItem>("text", "id")

DropDownChoiceコンストラクターの最後のパラメーターとして。

たぶん、もっと良い解決策があります。

于 2012-09-25T16:07:05.277 に答える