我正在为状态机设计一个网页,我使用的是jsplumb状态机。我想在多个选项卡上绘制这个状态机。被动态地使用“新建”按钮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”的格区域创建标签,状态机通过拖动状态机(SM)嵌段和在“FSM” DIV丢弃它动态地绘制。如果有多个选项卡,则在删除fsm div中的SM块后,它只能在第一个选项卡上的fsm div中拖动,而不在其他选项卡中。例如,如果有2个选项卡,则只能在第1个选项卡中的第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,所以非常感谢你的详细解释。
谢谢你的webaba。这在某种程度上可能对我有所帮助。 – user2630745
遏制:$(this)做了诡计。感谢您的其他意见。@Webaba,请你解释一下,你怎么能够在选项卡区域的所需位置拖放块?在我的情况下,当我在选项卡区域中放置块时,无论放在哪里,它总是进入(0,0)放置区域的位置。 – user2630745
这是因为您不断将其重新放置到放置区域。为了避免这种情况,请检查父级,如果它已经是选项卡,则将false返回到放置事件。 – webaba