نافذة الويكيت المشروطة:انقر خارج مشروط للرفض

StackOverflow https://stackoverflow.com/questions/6333735

  •  27-10-2019
  •  | 
  •  

سؤال

أحتاج إلى إضافة سلوك إلى ModalWindow بحيث أنه عندما ينقر المستخدم خارج النموذج، إذا تم استيفاء شرط معين (تم التحقق من جانب الخادم في ملف my respond() الطريقة)، تم رفض المشروط.

حاولت تنفيذ شيء يعتمد على هذه الإجابة.تكمن المشكلة في أنني لا أستطيع إرفاق مستمع نقرات بقسم النافذة المشروط لأنه لم تتم إضافته إلى DOM حتى يتم عرض المشروط (المثال يرفق keyup إلى الوثيقة نفسها.)

فكرت في التمديد ModalWindow وإضافة JS عبر getShowJavascript(), ، ولكن بعد ذلك ليس لدي أي وسيلة لتوصيله بـ AbstractDefaultAjaxBehavior.respond() طريقة للاختبار.

هل كانت مفيدة؟

المحلول

لقد قمت بحل هذه المشكلة عن طريق إضافة السلوك ليس إلى النموذج، بل إلى عنصر واجهة المستخدم الذي أضفته إلى النموذج عبر 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top