質問を単純化するために、jqueryuiportletウィジェットとまったく同じコードを使用していると仮定しましょう。
http://jqueryui.com/sortable/#portlets
stackoverflowのトピックに関する別のスレッドを読みましたが、元のコードが使用できなくなったため、ソリューションへのアプローチ方法についての手がかりが得られません。
新しいポートレットを既存の列に追加する最も簡単な方法を想像してみましょう。
$( "#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>'))
このアプローチでは、重要な問題があります。
ヘッダーの右隅にある「+」ボタンは、新しいポートレットでは機能しません。
ヘッダーとコンテンツテキストはdiv内に残りません。テキストがdivの端に達すると、外側に続きます。
ここでstackoverflowで取得したこのアプローチを使用して、ポートレットの順序を取得しようとしています。これは、デフォルトのjqueryポートレットを使用してアプリケーションをロードするだけで機能します。
$( ".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();
}、
新しいポートレットを追加する前後で、並べ替え可能な列要素を取得しようとすると、次のようになります。
$("#obtain").button().click(function() {
console.log($("#col0").sortable('toArray').toString());});
列ごとに適切な数の要素が表示されます(新しい要素が追加されます)が、列間で新しい要素を移動しようとすると、動的に新しい要素を作成すると、列内の位置がわかりません。新しいポートレットを作成するたびにstart()関数を再度実行する必要があるので、適切なインデックスを取得できると思います。しかし、私はそれにアプローチする方法がわかりません。
お時間をいただき、誠にありがとうございました。アドバイスをいただければ幸いです。
よろしく