我正在尝试在 jQuery DataTable 和 jQuery nestedSortable 之间拖动。问题是,当我放下可拖动对象(从 DataTable 中)时,它会恢复为表格行,而不是 li 对象(以适应嵌套排序表)。一个示例 jsFiddle 在这里。我的理想场景就像这个jQuery UI 示例,但源是数据表,目标是嵌套排序...
我通过为可拖动插件创建自己的“connectWith”选项找到了此修复程序来连接两个元素,因此我可以从表中拖放到可排序中。
我还想出了如何使用自定义助手使占位符看起来好像是一个 li 对象,但我不知道如何让放置对象等于助手,而不是原始表行. 我尝试过在 .draggable(stop)、.nestedSortable(stop) 和 .nestedSortable(receive) 事件中玩东西,但没有运气。有人可以指出我正确的方向吗?我在文档中遗漏了什么吗?
谢谢!祝所有真正阅读本文的人节日快乐...
我的基本代码:
$('#example_table').dataTable({
'sPaginationType': 'full_numbers',
'bJQueryUI':true
});
$('ol.sortable').nestedSortable({
forcePlaceholderSize: true,
handle: '.disclose',
helper: 'clone',
items: 'li',
opacity: .6,
placeholder: 'placeholder',
revert: true,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div',
maxLevels: 4,
isTree: true,
expandOnHover: 700,
startCollapsed: true,
stop: function(e, ui) {
},
connectWith: '#example_table',
receive: function( e, ui ) {
}
});
$( '#example_table > tbody > tr').draggable({
connectToNestedSortable: "#structure",
helper: function( event ) {
var _this = $(this);
var name_col = _this.find('.name_col')
.children('span');
var name = name_col.text();
var new_ele = $('<li></li>')
.addClass('mjs-nestedSortable-branch')
.addClass('mjs-nestedSortable-collapsed')
.append('<div></div>')
.append('<span><i class="fa fa-plus"></i></span>' + name);
return new_ele.clone();
},
revert: "invalid",
stop: function ( event, ui ) {
$(ui.item).replaceWith(ui.helper);
}
});
更新
我知道有很多关于如何在 jQuery 中更改可拖动对象的线程,所以只是为了记录一些我尝试过的东西(没有奏效):
附加到可排序的停止方法,并带有一个标记已删除项目的自定义类。
stop: function(e, ui) {
if (ui.item.hasClass('fromtable')) {
//clone and remove positioning from the helper element
var newDiv = $(ui.helper).clone(false)
.removeClass('fromtable');
ui.item.replaceWith(newDiv);
}
},
update: function(e, ui) {
if (ui.item.hasClass('fromtable')) {
//clone and remove positioning from the helper element
$(this) = $(ui.helper).clone(false)
.removeClass('fromtable');
}
},
同时使用 droppable 和 nestedSortable(这会留下重影,但它确实会丢弃看起来像 li 的东西......可能在正确的方向):
$('ol.sortable').droppable({
drop: function(e, ui) {
var new_item = ui.helper.clone();
$(this).append(new_item);
}
}).nestedSortable({etc...