为了简化问题,假设我们使用的代码与 jquery ui portlets 小部件完全相同:
http://jqueryui.com/sortable/#portlets
我已经阅读了关于stackoverflow中主题的另一个线程,但它真的没有给我关于如何处理解决方案的线索,因为原始代码不再可用
让我们想象一下向现有列添加新 portlet 的最简单方法:
$( "#col0" ).append($('<div class="portlet ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" id="p5">' +
'<div class="portlet-header ui-widget-header ui-corner-all">' +
'<span class="ui-icon ui-icon-minusthick"></span>' + "my title" + '</div>' +
'<div class="portlet-content">' + "my content" + '</div></div>'))
使用这种方法,我必须解决重要问题:
右上角的“+”按钮不适用于新的 portlet。
标题和内容文本不会保留在 div 内。当文本到达 div 的边缘时,它会继续向外。
我尝试使用在 stackoverflow 中获得的这种方法来获取 portlet 的顺序。当您使用默认的 jquery portlet 加载应用程序时,它就可以工作。
$( ".column" ).sortable({ connectWith: ".column", delay: 150, start: function(event, ui) { ui.item.startPos = ui.item.index(); item = ui.item; newList = oldList = ui.item.parent(); }, stop: function(event, ui) { /*saveOrder();*/ console.log("Start position: " + ui.item.startPos); console.log("New position: " + ui.item.index()); }, change: function(event,ui) { if(ui.sender) newList = ui.placeholder.parent();
},
在我添加一个新的 portlet 之前和之后,当我尝试获取可排序的列元素时:
$("#obtain").button().click(function() {
console.log($("#col0").sortable('toArray').toString());});
它为我提供了每列正确数量的元素(添加了新元素),但是当我尝试在列之间移动新元素时,当您动态地创建新元素时,列中的位置毫无意义。我认为每次创建新的 portlet 时我都应该再次执行 start() 函数,这样我才能获得正确的索引。但我不知道如何处理它。
非常感谢您的时间,我希望我能得到一些建议,
问候