2013-11-25 21 views
1

我有一個簡單的模式彈出窗口,可以通過按鈕關閉。在要顯示模式的頁面上有一個帶有ID的佔位符。當頁面第一次加載我addOrReplace一個空的面板。然後,爲了響應正確的操作,我將該面板與模式面板交換。然後關閉面板並將其與另一個空面板重新交換。一切正常。但是,這是奇怪的事情 - 當我第二次這樣做時,模式面板會正常打開,但是當我按下關閉它時,即使它被新的空面板替換並添加到目標中,它也不會關閉 - 但它之前工作過!當我再次按下相同的按鈕時,一切崩潰都無法找到模塊的標記組件(但不應該有它的標記了!)檢票口 - 第二次沒有更換面板

我已經想了一整天,但我還沒有找到這一切的原因。任何幫助將非常感激。

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> 
容器在您檢票生成最終的標記沒有真正的標籤:
+0

請添加一些代碼(Java和標記)。僅僅從描述來看,如果不是不可能弄清楚發生了什麼,那很難。 – Nicktar

+0

嘗試在面板上調用setOutputMarkupPlaceholderTag(true)。 –

+0

我做到了,但沒有幫助。之前也有setOutputMarkupId設置。 – user2902211

回答

0

因爲檢票口不能將JavaScript事件附加到

<wicket:container wicket:id="popupContainer" /> 

。在這種情況下,setOutputMarkupPlaceholderTag(true)不起作用。

將其更改爲DIV標籤:

<div wicket:id="popupContainer"></div> 
+0

這聽起來很有希望,但它也沒有幫助。 – user2902211