gojs自動佈局坑點問題解決思路


gojs自動佈局坑點問題解決思路

目錄

 

一、需求

二、難點一(自動佈局有效性切換)

三、難點二(自動佈局連線混亂)

 

 

一、需求

1.用戶可在拓撲圖面板進行編輯

2.可以通過拉取數據自動生成拓撲圖

3.用戶可以在生成的拓撲圖上二次編輯(難點1)

4.拓撲圖節點與連線的相關數據入庫

5.拉取入庫的節點和連線數據可以正常展示(難點2)

 

二、難點一(自動佈局有效性切換)

第二個需求需要用到gojs的layout自動佈局

參考API:https://gojs.net/latest/api/symbols/Layout.html

考官網樣例:https://gojs.net/latest/samples/tLayout.html

 

我們採用的是go.TreeLayout樹形佈局,參考官網樣例完成了該功能,自動佈局基本屬性需要

1.nodeData.key

2.linkData.to和linkData.from

我們從數據庫獲取自動成圖需要的json數據,Layout會自動佈局補充節點和連線的座標.

那麼問題來了,如下圖

 

可以發現當自動佈局生效後,用戶進行新增節點或者刪除節點,會再次觸發自動佈局效果,原有座標均被重置.也就是說,只要用戶有新增節點的操作,前面的修改會全部重置,但是又必須得使用TreeLayout,否則從後臺拉取的數據是無座標的,不會呈現在面板上.

有兩種解決方案:

1.自動成圖和用戶修改獨立做成兩個界面

2.自動成圖和用戶修改做成一個界面,控制自動佈局有效性

方案一功能冗餘,實現也較爲麻煩,體驗不好,所以嘗試第二種方案,根據官網提供的屬性,推薦使用isOngoing屬性,進行控制自動佈局是否生效

將isOngoing設置爲false,以防止添加或刪除部件等操作使此佈局無效。默認值爲true。

那麼解決思路是,將isOngoing設置爲false,當點擊自動成圖按鈕之後,將isOngoing設置爲true,自動成圖完成後,再將isOngins設置爲false,用戶再編輯的時候,就不會造成佈局無效.

代碼:

三、難點二(自動佈局連線混亂)

當自動佈局後,gojs會自動給nodedata和linkdata綁定座標,保存入庫,再次拉取節點和連線數據,使用默認佈局進行展示的時候,會發現連線有變化,如圖:

 

經過控制檯打印,發現節點數據沒變,連線座標缺被篡改了.拉取之後未操作,再次保存,對比第二次保存前後的連線數據,可以確定連線座標是被篡改了.參考自動佈局API對多個屬性進行調試,未果.按照官方文檔的說明,可以顯示的給節點綁定某些必要屬性,可以控制該節點的佈局效果.比如座標,但是屬性之多,調試難度大,相對複雜,最後選擇在gojs技術交流羣和論壇求助,最後在論壇中發現解決方案

論壇地址:https://forum.nwoods.com/c/gojs

新用戶可以有30天免費試用

 

 

參考第一個問題,發現這哥們和我們所遇到的麻煩一模一樣:

這是已解決的回答:

TreeLayout佈局會選擇合適的節點端口連接方向,我們通過在node上設置from.spot和to.spot來限制連線選擇附着點的方向.

隨後查看spot相關api,因爲我們的拓撲圖佈局是樹形結構,根節點在最左(如果樹結構是從上到下,可以考慮topCenter,和BottomCenter),所以選擇以下方式

 

 

代碼:

在節點模板上添加該屬性

最終問題得以解決,通過數據對比,發現連線座標與自動成圖的座標一致了

發佈了118 篇原創文章 · 獲贊 32 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章