【发布时间】:2013-11-25 08:36:55
【问题描述】:
我有一个简单的模式弹出窗口,可以通过按钮关闭。在要显示模式的页面上,有一个带有 id 的占位符。当页面首次加载时,我添加或替换一个空面板。然后,为了响应正确的操作,我将此面板与模态面板交换。然后我关闭面板并再次将其与另一个空面板交换。一切正常。但奇怪的是——当我第二次这样做时,模态面板正常打开,但是当我按下关闭时,即使它被新的空面板替换并添加到目标中,它也不会关闭——但它以前工作过!当我再次按下相同的按钮时,一切都崩溃了,无法找到模态标记的组件(但应该不再有标记了!)
我想了一天了,还是没找到原因。任何帮助将不胜感激。
private void swapToDummyPopupContainer() {
currentPopupContainer = new DummyPanel("popupContainer");
addOrReplace(currentPopupContainer);
}
private void swapToCreationPopupContainer(final FCalendarEvent event) {
EventCreationPopup popup = new EventCreationPopup("popupContainer", event) {
private static final long serialVersionUID = 965466080498078142L;
@Override
public void onDataSubmit(AjaxRequestTarget target) {
AvailabilityDTO model = getModel();
event.setTitle(model.getDescription());
pushNewEventToModel(model);
availabilityMapping.put(event.getId(), model);
FCalendarEventActions.addEvent(target, fcalendar, event);
swapToDummyPopupContainer();
target.add(currentPopupContainer);
}
@Override
public void onCancel(AjaxRequestTarget target) {
swapToDummyPopupContainer();
target.add(currentPopupContainer);
}
};
currentPopupContainer = popup;
addOrReplace(currentPopupContainer);
}
@Override
protected void onRangeSelection(AjaxRequestTarget target, Date startDate, Date endDate,
boolean isAllDay) {
final FCalendarEvent event = new FCalendarEvent();
swapToCreationPopupContainer(event);
target.add(currentPopupContainer);
}
至于标记有
<wicket:container wicket:id="popupContainer" />
在父面板中,要交换的两个面板都是这样定义的
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<wicket:panel>
</wicket:panel>
</html>
在模态标记的末尾(在结束标记之前)有 javascript,但我不相信它与它有任何关系:
<script type="text/javascript">
var $modal = $('#eventCreationPopup');
$modal.modal('setting', {
selector : {
close : '',
approve : '',
deny : ''
}
});
$modal.modal("show");
</script>
【问题讨论】:
-
请添加一些代码(Java 和标记)。仅从描述来看,即使不是不可能,也很难找出发生了什么。
-
尝试在您的面板上调用 setOutputMarkupPlaceholderTag(true)。
-
我做到了,但没有帮助。在此之前也设置了 setOutputMarkupId。