Закрыть окно настройки калитки Обратный вызов невозможен везде? - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть модальное окно с формой внутри.Пользователь может закрыть окно двумя способами: либо правильно заполнив форму и отправив изменения, либо нажав «x» в правом верхнем углу.

Теперь я пытаюсь сделать следующее:

Когда пользователь успешно заполняет форму и отправляет изменения, на родительской странице я пытаюсь отобразить (с помощью jQuery) некоторую информацию об успехе.

Когда пользователь нажимает «x», я хочу модальное окнобыть закрытым без какой-либо дополнительной информации.Однако setWindowClosedCallback не работает, как я ожидал.Взгляните на мой код, сначала я получаю ссылку на modalWindow (я пропустил некоторые неинтересные части кода, такие как добавление ввода формы и т. Д.):

public EditEmailForm( String id, final ModalWindow modalWindow,final User u )
{
    super( id );
    modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
    {
    private static final long serialVersionUID = 1L;

    @Override
    public void onClose(AjaxRequestTarget target) 
    {
            //here some code doing jQuery magic for parent page
    }
});
    AjaxSubmitLink closeBtn = new AjaxCloseCancelBtn( "close-x", this );

    add( new AjaxSubmitLink( "save", this )
    {
        private static final long serialVersionUID = 1L;

        @Override
        protected void onSubmit( AjaxRequestTarget target, Form<?> form )
        {
        //here's user info change
        }

        @Override
        protected void onError( AjaxRequestTarget target, Form<?> form )
        {
            target.add( feedbackPanel );
        }
    } );
    add( closeBtn );
}


protected class AjaxCloseCancelBtn extends AjaxSubmitLink
{
    private static final long serialVersionUID = 1L;

    public AjaxCloseCancelBtn( String id, Form<?> form )
    {
        super( id, form );
        setDefaultFormProcessing( false );
    }

    @Override
    protected void onSubmit( AjaxRequestTarget target, Form<?> form )
    {
        modalWindow.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
        {
            private static final long serialVersionUID = 1L;

            @Override
            public void onClose( AjaxRequestTarget arg0 )
            {               
            }

        });
        // revert fields values
        form.clearInput();
        // close popup
        modalWindow.close( target );
    }

    @Override
    protected void onError( AjaxRequestTarget target, Form<?> form )
    {
    }

}

Этот код работает на 50% хорошо, так какон отображает то, что я хочу на родительской странице, но он также делает это, когда я нажимаю "х", даже если я пытаюсь установить обратный вызов закрытия нового окна, который является пустым.Любое решение, как я могу преодолеть это?

1 Ответ

1 голос
/ 27 ноября 2011

Вам нужно вызвать org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow.close (AjaxRequestTarget)

...