نافذة الويكيت المشروطة:انقر خارج مشروط للرفض
-
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
.