我正在爲狀態機設計一個網頁,我使用的是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