我有一个ListView
,它显示一个Panel
的列表,一个在另一个下面。每个面板都有一个按钮(通过AjaxLink
实现),它关闭面板并从列表中删除它。
这是如何使ListView无效,以及如何创建面板:
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) I触发打开第二个面板的操作。该面板按预期显示在第一个面板下面。
第一个面板的关闭按钮:
<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和work。
4) i按下第一个按钮(上面板,ID pnlClose1a)。面板将按预期关闭。
其余按钮的ID更改为pnlClose1c,同样没有javascript对应项。pnlClose1a和pnlClose1b的Javascript代码仍然存在。
长话短说,我的AjaxLink
的javascript处理程序似乎存在害羞问题,只有在我按下F5或以任何其他方式重新加载整个页面之后才会出现。我想这是因为重新绘制pnlContainer
更改了当前面板的I-但是为什么链接的javascript没有同时更新呢?我的代码中有什么可以在不完全重新加载的情况下更新整个页面的吗?
问题是我很确定这之前.但我检查了整个班级的历史,找不到任何可能引发这种变化的重大变化。ListView
-code主要是静态的,因为我添加了它。
发布于 2014-01-14 02:25:30
我也有类似的问题。如果页面或面板中有任何硬编码的javascript代码,则(使用标记)删除它,并在面板的renderHead中设置js代码。
https://stackoverflow.com/questions/21110299
复制相似问题