使用wicket-dnd,是否可以将dropTop()
/ dropBottom()
与HTML表一起使用?如果是这样,选择器应该是什么?
我有一个通过ListView
创建的HTML表格,并且已成功使用dropCentre("tr")
,但这是唯一可行的drop选项。理想情况下,我想使用dropTopAndBottom()
并查看表行之间的水平分隔符,以指示放置目标。
更新 以下是为简洁起见而简化的相关代码。有问题的表每行都有一个标签,并添加到表格中。
// Container class for Wicket DND
final WebMarkupContainer dataWrapper = new WebMarkupContainer("dataWrapper");
dataWrapper.add(new WebTheme());
final ListView<BinaryData> data = new ListView<BinaryData>("data", list) {
@Override
protected void populateItem(final ListItem<BinaryData> item) {
final BinaryData data = item.getModelObject();
item.add(new Label("label", data.getLabel()));
}
@Override
protected ListItem<BinaryData> newItem(final int index, final IModel<BinaryData> itemModel) {
final ListItem<BinaryData> item = super.newItem(index, itemModel);
item.setOutputMarkupId(true);
return item;
}
};
dataWrapper.add(data);
dataWrapper.add(new DragSource(Operation.MOVE) {
@Override
public void onAfterDrop(final AjaxRequestTarget target, final Transfer transfer) {
}
}.drag("tr"));
dataWrapper.add(new DropTarget(Operation.MOVE) {
@Override
public void onDrop(final AjaxRequestTarget ajaxTarget, final Transfer transfer, final Location location) {
}
}.dropTopAndBottom("tr"));
form.add(dataWrapper);
标记:
<div wicket:id="dataWrapper">
<table>
<tbody>
<tr wicket:id="data">
<td wicket:id="label"></td>
</tr>
</tbody>
</table>
</div>
我正在使用Wicket-DND 0.6.0和Wicket 6.6.0。当我使用此代码拖动一行时,我会在拖动指示器中显示红叉图标。
答案 0 :(得分:0)
wicket-dnd使用标准css选择器来确定放置位置。
以下是wicket-dnd-examples中修改过的TableExample:
table.add(new DropTarget(Operation.MOVE)
{
@Override
public void onDrop(AjaxRequestTarget target, Transfer transfer, Location location)
throws Reject
// something was dropped
{
}.dropTopAndBottom("tr");
答案 1 :(得分:0)
我的问题不是由Wicket DND引起的,而是由我在标记中对JQuery UI的明显冲突引用(Wicket DND不需要JQuery UI,但我的应用程序的其他组件也存在)。
使用WiQuery提供的参考替换它不再导致任何问题:
@Override
public void renderHead(final IHeaderResponse response) {
super.renderHead(response);
// Ensure that Wicket's jQuery library is always loaded, so we can invoke our own jQuery calls
response.render(JavaScriptReferenceHeaderItem.forReference(getApplication().getJavaScriptLibrarySettings().getJQueryReference()));
response.render(JavaScriptReferenceHeaderItem.forReference(CoreUIJavaScriptResourceReference.get()));
}