Wicket ModalWindow: нажмите за пределами модального окна, чтобы закрыть - PullRequest
1 голос
/ 13 июня 2011

Мне нужно добавить поведение к ModalWindow, чтобы, когда пользователь щелкает за пределами модального режима, если выполняется определенное условие (проверено на стороне сервера в моем методе respond()), модальное отклоняется.

Я пытался реализовать что-то на основе этого ответа .Проблема в том, что я не могу прикрепить прослушиватель кликов к div модального окна, потому что он не добавляется в DOM до тех пор, пока не будет отображен модальный (пример прикрепляет keyup к самому документу.)думал о расширении ModalWindow и добавлении JS через getShowJavascript(), но тогда у меня нет никаких средств, чтобы подключить его к AbstractDefaultAjaxBehavior.respond() методу для теста.

1 Ответ

2 голосов
/ 13 июня 2011

Я решил это, добавив поведение не к модалу, а к виджету, который добавляю к модалу через 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.

...