1

ModalWindowユーザーがモーダルの外側をクリックしたときに、特定の条件が満たされた場合 (メソッドでサーバー側でチェックされた場合)、モーダルが閉じられるように動作を追加する必要がありますrespond()

この回答に基づいて何かを実装してみました。問題は、モーダルが表示されるまでDOMに追加されないため、クリックリスナーをモーダルウィンドウのdivにアタッチできないことです(例ではkeyup、をドキュメント自体にアタッチしています)。

ModalWindowを介して JS を拡張して追加しようと考えましたが、テスト用のメソッドgetShowJavascript()に接続する手段がありません。AbstractDefaultAjaxBehavior.respond()

4

1 に答える 1

2

モーダルではなく、モーダルに追加するウィジェットに動作を追加することでこれを解決しましたModalWindow.setContent()。ウィジェットがモーダルに追加されると、マスク div が DOM に存在し、クリック ハンドラーを正常にアタッチできます。

ウィット:

public static class CloseModalOnOutsideClickBehavior extends AbstractDefaultAjaxBehavior
{
    private final ModalWindow modal;

    public CloseModalOnOutsideClickBehavior(ModalWindow modal)
    {
        this.modal = modal;
    }

    @Override
    protected void respond(AjaxRequestTarget target)
    {
        if (myConditionIsMet()) modal.close(target);
    }

    @Override
    public void renderHead(IHeaderResponse response)
    {
        response.renderJavascriptReference("http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js");
        response.renderJavascript("" +
                "$(document).ready(function() {\n" +
                "  $('div.wicket-mask-dark').bind('click', function(evt) {\n" +
                        getCallbackScript() + "\n" +
                "        evt.preventDefault();\n" +
                "  });\n" +
                "});", "closeModal");
    }
}

「wicket-mask-dark」という名前のクラスを持つモーダル ウィンドウのマスクに多少不安定に依存していることに注意してください。で使用される CSS 設定を変更すると、これが当てはまらない場合がありますModalWindow

于 2011-06-13T19:25:38.490 に答える