我正在为状态机设计一个网页,我正在使用 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 中动态绘制状态机。如果有多个选项卡,在 fsm div 中放置 SM 块后,它只能在第一个选项卡上拖动到 fsm div 中,而不能在另一个选项卡中拖动。例如,如果有 2 个选项卡,我只能在第一个选项卡中重新定位 SM 块,当我开始拖动 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 是动态创建的,或者有超过 1 个 fsm div。处理这种多选项卡情况的最佳选择是什么?
我试图从除活动选项卡之外的所有选项卡中删除 fsm div 然后它可以工作。即使有超过 1 个标签,我也可以从标签内容中拖动 SM 块,因为只有 1 个 fsm div。但是当我切换到该选项卡时,我必须再次将 fsm div 添加回该选项卡。那么在切换到任何其他选项卡之前保存选项卡内容并在打开该选项卡时将其加载回来的最佳方法是什么?
为了提供我的背景,这是我第一次在 jquery/jsplumb 上工作,非常感谢详细的解释。