ステート マシン用の Web ページを設計しており、jsplumb ステート マシンを使用しています。このステート マシンを複数のタブで描画したいと考えています。タブは「新規」ボタンを使用して動的に作成されます
<div id="tabs">
<ul>
<li>
<a href="#Untitled-1">Untitled-1</a>
<span class="ui-icon ui-icon-close"></span>
</li>
</ul>
<div id="Untitled-1" class="content">
<div id="Untitled-1-content" class="fsm">
</div>
</div>
</div>
クラス「fsm」の div 領域では、ステート マシン (SM) ブロックをドラッグして「fsm」の div にドロップすることにより、ステート マシンが動的に描画されます。複数のタブがある場合、SM ブロックを fsm div にドロップした後、最初のタブでのみ fsm div にドラッグでき、他のタブにはドラッグできません。たとえば、タブが 2 つある場合、SM ブロックの位置を変更できるのは 1 番目のタブだけです。2 番目のタブで SM ブロックをドラッグし始めると、fsm div から消え、左上の座標が負になります。
これは fsm div のコードです -
$("div.fsm").droppable({
accept: ".cTemp, .rTemp",
hoverClass: "ui-state-hover",
drop: function (event, ui) {
var draggable = $(ui.draggable[0]);
if (draggable.attr("class").indexOf("rTemp") > -1) {
$("<div class='rBase' id='rect" + rectI + "'></div>").text("rect" + rectI).appendTo(this);
$("#rect" + rectI).append("<div class='ep'></div>").appendTo(this);
$("#rect" + rectI).addClass("draggable");
jsPlumb.draggable($(".rBase"),{containment: ".fsm", zIndex: 30});
} else if (draggable.attr("class").indexOf("cTemp") > -1) {
$("<div class='cBase' id='circle" + circleI + "'></div>").text("circle" + circleI).appendTo(this);
$("#circle" + circleI).append("<div class='ep'></div>").appendTo(this);
$("#circle" + circleI).addClass("draggable");
jsPlumb.draggable($(".cBase"),{containment: ".fsm", zIndex: 30});
}
jsPlumbDemo.init();
}
});
これは、fsm div が動的に作成されたか、複数の fsm div があるためである可能性があります。このマルチタブの状況を処理するための最良のオプションは何ですか?
アクティブなタブを除くすべてのタブから fsm div を削除しようとすると、機能します。fsm div は 1 つしかないため、複数のタブがある場合でも、タブ コンテンツから SM ブロックをドラッグできます。しかし、そのタブに切り替えたときに fsm div をタブに再度追加する必要があります。次に、他のタブに切り替える前にタブのコンテンツを保存し、そのタブが開かれたときにそれをロードする最良の方法はどれですか?
私のバックグラウンドを説明すると、jquery/jsplumb に取り組むのはこれが初めてなので、詳細な説明は非常にありがたいです。