我对动态可排序列表有疑问,其中的元素也应该可排序。 问题在于,列表中的每个元素都是动态的,因为它将从模板div中克隆并附加到文档中。
当前,块(。pb-row)可以按预期排序。
但是动态添加的小部件(。builder-row-content)的嵌套可排序功能无效。
只有第一个块中的嵌套节点是可拖动的,并且非常容易出错。 我也可以将它们拖到行外。
附加添加的块中的节点完全不可拖动。
我也在控制台中收到此消息
在初始化之前无法在可排序的对象上调用方法;尝试调用方法“刷新”
运行排序的HTML:
<div class="pb-rows"> // Wrapper of all Blocks
<div class="pb-row" name="pb-row"> // each Block
<div class="builder-row-header">
<span class="row-btn pb-handle fas fa-sort"></span>
<div>Block</div>
<span onclick="handleRemoveClick(this)" class="row-btn row-btn-right pb-remove fas fa-trash"></span>
</div>
<div class="pb-container">
<div class="builder-row-content">
// nested sortable widgets will appear here
</div>
</div>
</div>
// more .pb-rows will appear here
</div>
尝试使用jQuery可排序列表:
// jQuery Sorting Lib
jQuery(".pb-rows").sortable({
handle: ".pb-handle",
cursor: "grabbing",
});
// jQuery Sorting Lib
jQuery(".builder-row-content").sortable({
connectWith: '.pb-rows
handle: ".pb-handle-widget",
cursor: "grabbing",
});
尝试的解决方案无效:
const handleAddClick = e => {
e.preventDefault();
...
jQuery(".builder-row-content").sortable("refresh");
};
答案 0 :(得分:0)
您需要将可排序项重新初始化为动态添加的元素,因此:
将可排序的函数包装在一个函数中
// Sorting
function enableSort() {
// jQuery Sorting Lib
$(".pb-rows").sortable({
handle: ".pb-handle",
cursor: "grabbing"
});
// jQuery Sorting Lib
$(".builder-row-content").sortable({
handle: ".pb-handle-widget",
cursor: "grabbing"
});
} enableSort();
然后在pbCreateNode
中调用该函数。
const pbCreateNode = (type, props, html) => {
enableSort();
let element = document.createElement(type);
props &&
props.forEach(prop => {
let key = Object.keys(prop)[0];
let value = prop[key];
element.setAttribute(key, value);
});
html && (element.innerHTML = html);
return element;
};