1

我需要添加一种行为,ModalWindow以便当用户在模态之外单击时,如果满足某个条件(在我的respond()方法中检查了服务器端),模态将被解除。

我尝试根据这个答案实现一些东西。问题是我无法将点击侦听器附加到模态窗口 div,因为在显示模态之前它不会添加到 DOM(该示例将 a 附加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”的类;如果您更改ModalWindow.

于 2011-06-13T19:25:38.490 回答