Закрыть модальное окно калитки нажатием кнопки - PullRequest
2 голосов
/ 09 февраля 2011

Я хочу закрыть модальное окно, нажав кнопку, расположенную на странице модального окна. Это не работает. Моя страница модального окна содержит видео плеер.

Мой код:

public class PlayVideoWindow extends WebPage {
    public PlayVideoWindow(final Page modalWindowPage, final ModalWindow window, final String itemId) {
        final String xmlFilePath = ((WebApplication) getApplication()).getServletContext().getRealPath("/resources/video/xml/video.xml");
        String filename = null; 

        try {
            filename = WebVideo.getVideo(itemId, xmlFilePath);
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }        

        WebMarkupContainer videoContainer = new WebMarkupContainer("videoDiv");
        add(videoContainer);

        add(HeaderContributor.forJavaScript("resources/video/js/swfobject.js"));

        final String script = "var swfVersionStr = '10.0.0';"
            + "var xiSwfUrlStr = 'playerProductInstall.swf';"
            + "var flashvars = {};"
            + "flashvars.filename = '"+ filename +"'" +";"
            + "var params = {};"
            + "params.wmode = 'transparent';"
            + "params.quality = 'high';"
            + "params.allowscriptaccess = 'always';"
            + "params.allowfullscreen = 'true';"
            + "params.allownetworking = 'all';"
            + "var attributes = {};"
            + "attributes.id = 'Player';"
            + "attributes.name = 'Player';"
            + "attributes.align = 'left';"
            + "swfobject.embedSWF('/jtrac/resources/video/swf/Player.swf', 'movieDiv', '320', '320', swfVersionStr, xiSwfUrlStr, flashvars, params, attributes);"
            + "swfobject.createCSS('#flashContent', 'display:block;text-align:left;');";

    add(new AbstractBehavior() {
        public void renderHead(IHeaderResponse response) {
            super.renderHead(response);
            response.renderOnLoadJavascript(script);
        }
    });

    //videoContainer.add(new AjaxButton("close") {
      //  protected void onSubmit(final AjaxRequestTarget target, final Form form) {
        //    PlayVideoWindow.this.close(target);
        //}
    //});

    //Button closeButton;
    //videoContainer.add(closeButton = new Button("close"));
    //closeButton.add(new AttributeAppender("onclick", new Model("window.close();"), ";"));
    }
}

А вот и HTML:

<div wicket:id="videoDiv">
<div id="movieDiv"></div>
<input type="button" wicket:id="close" />
</div>

Закомментированные строки кода - мои тесты. Любая информация будет очень полезна для меня. Спасибо.

EDIT:
Я решил свою проблему с этим кодом:

add(new AjaxLink("close") {
        public void onClick(AjaxRequestTarget target) {
            window.close(target);
        }
    });

Ответы [ 3 ]

3 голосов
/ 22 мая 2012

Вот пример сценария:

<script type="text/javascript">

    if (top != self) {
        var wicket = top.Wicket;
        if (wicket && wicket.Window) {
            var modal = wicket.Window.get();
            if (modal) {
                modal.close();
            }
        }
        top.location.href = location.href;
    }
</script> 
2 голосов
/ 10 февраля 2011

Все, что вам нужно сделать, это вставить вызов метода close в код вашей кнопки.

Чтобы закрыть окно, есть несколько вариантов. Статический метод close(AjaxRequestTarget) можно использовать для закрытия окна из обработчика ссылки ajax внутри окна.

Источник: документация ModalWindow в версии 1.4.7.

Я вижу, что вы решили свою проблему с помощью ссылки, но в вашем сообщении упоминалась кнопка, поэтому я не знаю, было ли решение для ссылок простым решением, пока вы не добились чего-то лучшего. Кроме того, поскольку close является статическим методом, его следует вызывать из класса, а не из экземпляра.

1 голос
/ 21 декабря 2012

вы получаете окно ModalWindow в вашем конструкторе.

Попробуйте

window.close(target);
...