1

wicket-dnd では、HTML テーブルでdropTop()/を使用できますか? dropBottom()もしそうなら、セレクターは何であるべきですか?

を介して作成された HTML テーブルがあり、ListViewで成功しましたdropCentre("tr")が、機能しているように見えるドロップ オプションはこれだけです。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 を使用しています。このコードを使用して行をドラッグすると、ドラッグ インジケーターに赤い十字アイコンが表示されます。

4

2 に答える 2

0

私の問題は、Wicket DND が原因ではなく、マークアップ内の JQuery UI への明らかに競合する参照が原因でした (JQuery UI は Wicket DND には必要ありませんが、アプリケーションの他のコンポーネントには存在していました)。

これを 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()));
}
于 2013-08-07T02:33:12.943 に答える