我有一個ListView
,它顯示Panel
s列表,一個在另一個之下。每個面板都有一個按鈕(通過AjaxLink
實現),用於關閉面板並將其從列表中移除。Wicket AjaxLink JavaScript處理程序顯示奇怪的行爲
這是ListView控件是如何initalized以及如何面板創建:
panelsList = new ArrayList<MyPanel>();
pnlContainer = new WebMarkupContainer("pnlContainer");
ListView<MyPanel> pnlItems = new ListView<MyPanel>("pnlItems", panelsList) {
@Override
protected void populateItem(final ListItem<MyPanel> item) {
item.add(item.getModelObject());
item.add(new AjaxLink<Void>("pnlClose") {
@Override
public void onClick(AjaxRequestTarget target) {
panelsList.remove(item.getModelObject());
target.add(pnlContainer); // repaint panel container
}
});
}
};
pnlContainer.setOutputMarkupId(true);
pnlContainer.add(pnlItems);
add(pnlContainer);
到目前爲止是這種情況 - 觸發增加新的面板(通常也AjaxLink
S)的行動做什麼,他們應該和新面板被添加並正確顯示。但是我在關閉按鈕完全工作時遇到問題。
請參閱下面的步驟:
1)我啓動服務器,然後導航到主頁。 ListView
最初由一個面板填充。此面板的
關閉按鈕的代碼:
<a wicket:id="pnlClose" id="pnlClose7" href="javascript:;">Close</a>
搜索的頁面代碼pnlClose7發現下面的JavaScript代碼,使預期的按鈕工作:
Wicket.Ajax.ajax({"u":"./?0-1.IBehaviorListener.0-pnlContainer-pnlItems-0-pnlClose","e":"click","c":"pnlClose7"});;
注:我現在不按按鈕,如果我願意,它會按預期工作(經過全面測試)。
2)我觸發打開第二面板的動作。按預期在第一個面板下面顯示面板。
第一面板的關閉按鈕:
<a wicket:id="pnlClose" id="pnlClosef" href="javascript:;">X</i></a>
關閉按鈕第二面板:
<a wicket:id="pnlClose" id="pnlClose10" href="javascript:;">X</i></a>
但現在,無論是搜索pnlClosef也不pnlClose10發現一些javascript碼。按鈕(都!)不起作用。我仍然可以找到pnlClose7的JavaScript代碼。
3)我通過按F5刷新頁面。
按鈕ID更改爲pnlClose1a和pnlClose1b。這兩個ID都有javascript對應和工作。
4)我按下第一個按鈕(上圖,ID pnlClose1a)。小組按預期關閉。
其餘按鈕的ID更改爲pnlClose1c,同樣沒有javascript對應項。Javascript code for pnlClose1a and pnlClose1b仍存在。
爲了長話短說,我的AjaxLink
的javascript處理程序似乎有害羞問題,並且只在按F5或以任何其他方式重新加載整個頁面後纔會出現。我想這是因爲重繪pnlContainer
會改變當前面板的ID - 但爲什麼鏈接的javascript不會同時更新?有沒有什麼我可以改變我的代碼來更新整個頁面而無需重新加載?
奇怪的是,我很確定這工作之前...但我檢查了整個班級的歷史,並找不到任何重大變化,將觸發這一點。 ListView
-代碼主要是靜態的,因爲我添加了它。
嘗試設置爲true:http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/markup/html/list/ListView.html#setReuseItems%28boolean%29 –
哎呀,忘了補充說...已經嘗試過,沒有效果。在附加的說明中,頁面設置爲'isVersioned(){return false;}',如果這有什麼區別的話。但我嘗試了版本控制,但它也不起作用。與版本控制和重複使用項目相同。 – sina