如何访问 Wicket Palette 中当前选定的项目
How to access the currently selected item within Wicket Palette
我正在尝试覆盖 Wicket Palette 的某些功能。我附上了一张我试图用 Palette 完成的图片。基本上除了 Palette 的 select-item-clickbutton-moveToRight 功能外,我还想知道哪个项目在移动之前已经被 selected。当我 select 任一面板中的一个项目并单击“查看”按钮时,我应该能够显示一个 html 与调色板中当前 selected 项目相关的页面。
现在,按钮被放置在 Palette 代码之外,只要我能得到 selected 元素的 ID,我就能完成我的 objective。
我被困在需要知道调色板中 select 编辑了哪个项目的地步。
这是我目前尝试过的方法:
1. 使用 AjaxFormComponentUpdatingBehavior
向 choicesComponent 添加一个 onclick 侦听器
final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList),
formsList, new CustomObjectChoiceRenderer(), 8 , false ){
@Override
protected void onBeforeRender() {
super.onBeforeRender();
getChoicesComponent().add(new AjaxFormComponentUpdatingBehavior("onclick"){
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("REACHED HERE"+ getFormComponent());
/*
* The code reaches here for each click but I am unable to know which item was selected */
}
});
}
};
- 使用 "onclick" 侦听器将 Recorder 组件添加到 Palette。
此侦听器根本不会被调用。
final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList),
formsList, new CustomObjectChoiceRenderer(), 8 , false ){
protected Recorder newRecorderComponent() {
Recorder recorder = super.newRecorderComponent();
recorder.add(new AjaxFormComponentUpdatingBehavior("onclick") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("reached record on click ");
}
});
return recorder;
}
};
Trying to create this palette with a custom button
请帮忙。提前致谢。
Palette.java javadoc 解释了如何 "Ajax-ify" 它:https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java#L52-L71
但这对您没有帮助,因为选择首先在客户端完成,然后通知 Wicket:
https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js#L118-L127
您需要在 Wicket 之前为 'change' 事件注册您自己的 JS 事件侦听器,或者使用 monkey-patch palette.js 来覆盖 Wicket.Palette.updateRecorder()
函数。
我正在尝试覆盖 Wicket Palette 的某些功能。我附上了一张我试图用 Palette 完成的图片。基本上除了 Palette 的 select-item-clickbutton-moveToRight 功能外,我还想知道哪个项目在移动之前已经被 selected。当我 select 任一面板中的一个项目并单击“查看”按钮时,我应该能够显示一个 html 与调色板中当前 selected 项目相关的页面。 现在,按钮被放置在 Palette 代码之外,只要我能得到 selected 元素的 ID,我就能完成我的 objective。 我被困在需要知道调色板中 select 编辑了哪个项目的地步。
这是我目前尝试过的方法: 1. 使用 AjaxFormComponentUpdatingBehavior
向 choicesComponent 添加一个 onclick 侦听器final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList), formsList, new CustomObjectChoiceRenderer(), 8 , false ){
@Override
protected void onBeforeRender() {
super.onBeforeRender();
getChoicesComponent().add(new AjaxFormComponentUpdatingBehavior("onclick"){
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("REACHED HERE"+ getFormComponent());
/*
* The code reaches here for each click but I am unable to know which item was selected */
}
});
}
};
- 使用 "onclick" 侦听器将 Recorder 组件添加到 Palette。 此侦听器根本不会被调用。
final Palette classFormMapping = new Palette("formsPalette", new ListModel(selectedFormsList), formsList, new CustomObjectChoiceRenderer(), 8 , false ){
protected Recorder newRecorderComponent() {
Recorder recorder = super.newRecorderComponent();
recorder.add(new AjaxFormComponentUpdatingBehavior("onclick") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.println("reached record on click ");
}
});
return recorder;
}
};
Trying to create this palette with a custom button
请帮忙。提前致谢。
Palette.java javadoc 解释了如何 "Ajax-ify" 它:https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/Palette.java#L52-L71
但这对您没有帮助,因为选择首先在客户端完成,然后通知 Wicket: https://github.com/apache/wicket/blob/529db58c413861677f7ff6736f9363edf42ae85a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/form/palette/palette.js#L118-L127
您需要在 Wicket 之前为 'change' 事件注册您自己的 JS 事件侦听器,或者使用 monkey-patch palette.js 来覆盖 Wicket.Palette.updateRecorder()
函数。